Массовый импорт с помощью mptt, django и csv

У меня есть следующий код для получения данных из очень большого csv, импорта их в модель Django и преобразования их во вложенные категории (модель mptt).

with open(path, "rt") as f:
        reader = csv.reader(f, dialect="excel")
        next(reader)
        for row in reader:
            if int(row[2]) == 0:

                obj = Category(
                    cat_id=int(row[0]),
                    cat_name=row[1],
                    cat_parent_id=int(row[2]),
                    cat_level=int(row[3]),
                    cat_link=row[4],
                )
                obj.save()
            else:
                parent_id = Category.objects.get(cat_id=int(row[2]))
                obj = Category(
                    cat_id=int(row[0]),
                    cat_name=row[1],
                    cat_parent_id=int(row[2]),
                    cat_level=int(row[3]),
                    cat_link=row[4],
                    parent=parent_id,
                )
                obj.save()

На выполнение этого импорта уходит более часа. Есть ли более эффективный способ сделать это? Я пробовал использовать bulk_create list comprehension, но обнаружил, что мне нужно

parent_id = Category.objects.get(cat_id=int(row[2]))

чтобы mptt правильно гнездился. Также, я думаю мне нужно сохранять каждую вставку, чтобы mptt правильно обновлялся. Я уверен, что запрос parent_id делает операцию такой медленной, поскольку ему приходится запрашивать базу данных для каждой строки в CSV (более 27 тысяч строк).

Плюсом является то, что эту операцию нужно будет выполнять только время от времени, но этот набор данных не настолько велик, чтобы на ее выполнение уходило более часа.

Вернуться на верх