Jako metody django model save() are not lazy, a jako zachowanie krótkich transakcji jest ogólną dobrą praktyką, powinny być zapisywane najlepiej odroczone do końca bloków transakcji?Django - Przechowywanie transakcji opartych na save() Krótki
Przykładowy przykład kodu B może zawierać transakcję otwartą krócej niż przykład kodu A poniżej?
Kod próbka A:
from django.db import transaction
from my_app.models import MyModel
@transaction.commit_on_success
def model_altering_method():
for inst in MyModel.objects.all()[0:5000]:
inst.name = 'Joel Spolsky'
# Some models independent time consuming operations...
inst.save()
przykładowy kod B:
from django.db import transaction
from my_app.models import MyModel
@transaction.commit_on_success
def model_altering_method():
instances_to_save = []
for inst in MyModel.objects.all()[0:5000]:
inst.name = 'Joel Spolsky'
# Some models independent time consuming operations...
instances_to_save.append(inst)
for inst in instances_to_save:
inst.save()
W wielu przypadkach przygotowanie danych do transakcji zajmuje dużo czasu. Jeśli powiesz, że transakcja zostanie otwarta zaraz po rozpoczęciu dekorowanego bloku, to jest motywacja do oddzielenia bloków przygotowawczych i bloków transakcji ... Jeśli tak jest, to powinna być udokumentowana w dokumentacji django w sekcji transakcji . – Jonathan