Как массово обновить данные в таблице 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)
Этот код работает. Но может быть вы знаете лучший способ?