Como los métodos de guardar de django modelo are not lazy, y como mantener las transacciones cortas es una buena práctica general, ¿deberían reservarse preferiblemente los ahorros al final de los bloques de transacción?Django - Guardar operaciones basadas en save() short
Como ejemplo, ¿la muestra de código B mantendría una transacción abierta por menos tiempo que la muestra de código A a continuación?
muestraCódigo 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()
Ejemplo de código 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()
En muchos casos, la preparación de los datos para una transacción lleva mucho tiempo. Si, como dices, la transacción se abre tan pronto como se inicia el bloque decorado, existe una motivación para separar bloques de preparación y bloques de transacción ... Si este es el caso, entonces debe documentarse en la documentación de django en la sección de transacciones . – Jonathan