Быстрый способ сохранения больших данных CSV в базу данных Django
Я пытаюсь загрузить обширные данные CSV, например, 100k+ в таблицу базы данных Django, я создал модель ниже и затем сделал функцию сохранения для вставки данных в таблицу.
Это занимает много времени, поэтому я написал код celery для выполнения этого в фоновом режиме, чтобы не было таймаута, Но сохранение данных в таблицу происходит медленнее. Есть ли способ сделать сохранение быстрее?
class Film(models.Model):
title = models.CharField(max_length=200)
year = models.PositiveIntegerField()
genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
def save_csv_to_db():
with open('films/films.csv') as file:
reader = csv.reader(file)
next(reader)
for row in reader:
print(row)
genre, _ = Genre.objects.get_or_create(name=row[-1])
film = Film(title=row[0],
year=row[2],
genre=genre)
film.save()
python в основном работает на одном процессе.
Думаю, вы можете использовать асинхронную задачу для хранения файлов. Она не остановит основной процесс
import asyncio
import csv
import aiofiles
from aiocsv import AsyncReader, AsyncDictReader, AsyncWriter, AsyncDictWriter
async def main():
# simple reading
async with aiofiles.open("some_file.csv", mode="r", encoding="utf-8", newline="") as afp:
async for row in AsyncReader(afp):
print(row)