Come metodo django save() metodi are not lazy e poiché mantenere le transazioni brevi è una buona pratica generale, i salvataggi dovrebbero preferibilmente essere posticipati alla fine dei blocchi di transazione?Django - Keeping save() transazioni basate short
Ad esempio, il codice di esempio B mantiene una transazione aperta per meno tempo rispetto al codice di esempio A di seguito?
campioneCodice 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()
Esempio di codice 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()
In molti casi, la preparazione dei dati per una transazione richiede molto tempo. Se come dici tu, la transazione viene aperta non appena inizia il blocco decorato, quindi c'è una motivazione per separare blocchi di preparazione e blocchi di transazione ... Se questo è il caso, allora dovrebbe essere documentato nella documentazione di django nella sezione delle transazioni . – Jonathan