【发布时间】:2017-05-06 07:16:49
【问题描述】:
有没有更有效的方法可以用 F 表达式来做到这一点?一些如何减少打数据库?
# 1st way hits DB twice per object
def something():
pks = [4, 2, 1, 3, 0]
for i in range(len(pks)):
mymodel.objects.get(pk=pks[i]).update(attr=i)
# 2nd way hits DB once per obj and once for the queryset
def something():
pks = [4, 2, 1, 3, 0]
order = Case(*[When(pk=pk, then=pos) for pos, pk in enumerate(pks)])
query = mymodel.objects.filter(pk__in=pks).order_by(order)
for i in range(len(query)):
query[i].attr = i
query[i].save()
编辑以使变量保持一致。
【问题讨论】:
标签: python django django-orm