相关疑难解决方法(0)

Django - 保持基于save()的交易简短

由于django模型的save()方法并不是懒惰的,并且由于保持事务简短是一般的好习惯,应该保存优先级延迟到事务块的末尾?

例如,代码示例B是否会将事务打开的时间少于下面的代码示例A?

代码示例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()
Run Code Online (Sandbox Code Playgroud)

代码示例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()
Run Code Online (Sandbox Code Playgroud)

database django performance transactions django-models

5
推荐指数
1
解决办法
1831
查看次数