РЕДАКТИРОВАНИЕ: commit_on_success
устарело и было удалено в Django 1.8.Вместо этого используйте transaction.atomic
.См. ответ Фрейзера Харриса .
На самом деле это легче сделать, чем вы думаете.Вы можете использовать транзакции в Django.Эти пакетные операции с базой данных (в частности, сохранение, вставка и удаление) в одну операцию.Я нашел самый простой в использовании commit_on_success
.По сути, вы оборачиваете операции сохранения базы данных в функцию, а затем используете декоратор commit_on_success
.
from django.db.transaction import commit_on_success
@commit_on_success
def lot_of_saves(queryset):
for item in queryset:
modify_item(item)
item.save()
Это значительно увеличит скорость.Вы также получите преимущество откатов, если какой-либо из элементов выйдет из строя.Если у вас есть миллионы операций сохранения, вам, возможно, придется фиксировать их в блоках, используя commit_manually
и transaction.commit()
, но мне это редко требуется.
Надеюсь, это поможет,
Будет