Как массово обновить данные в таблице django db?

Мне нужно часто разбирать большой xml файл и вставлять и обновлять данные в таблицу db. Как я могу сделать это быстро, не удаляя данные из базы данных. Сейчас я удаляю все данные перед разбором и вставляю все данные после. Но при этом ломаются все внешние ключи.

    for category in self.root.findall('.//categories/category'):
        try:
            cat_id = category.get('id')
            cat = CategoryModel(
                id=cat_id, name=category.text,
                picture=category.get('picture')
            )
            categories[cat_id] = cat

    CategoryModel.objects.all().delete()
    CategoryModel.objects.bulk_create(categories.values(), batch_size=50000)

Далее моя генерация кода. Я использую bulk_update:

    all_categories = CategoryModel.objects.all()
    created_categories = [str(cat[0]) for cat in all_categories.values_list('id')]
    new_cats = []
    update_cats = []
    for category in self.root.findall('.//categories/category'):
        try:
            cat_id = category.get('id')
            cat = CategoryModel(
                id=cat_id, name=category.text,
                picture=category.get('picture')
            )
            categories[cat_id] = cat

        if cat_id in created_categories:
            update_cats.append(cat)
        else:
            new_cats.append(cat)

    CategoryModel.objects.bulk_create(new_cats, batch_size=50000)
    all_categories.bulk_update(update_cats, fields=['name', 'picture'], batch_size=1000)

Этот код работает. Но может быть вы знаете лучший способ?

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