如何在Django模型中原子性地查询和更新记录集?
我在一个django模型里有一些记录,每次我想查询并更新其中的一些记录。
我该如何以原子性的方式来进行这个操作呢?
def queryAndUpdate(count):
entries = Model.objects.filter(...)[:count]
for entry in entries:
entry.count = F('count') + 1
entry.save()
return entries
我试过QuerySet.select_for_update(),但是失败了。
1 个回答
1
简单来说:
Model.objects.filter(...).update(count=F('count') + 1)
如果你想把 QuerySet
的大小限制为100,可以使用 Model.objects.filter(...)[:100]
。这段代码会被转换成 SELECT ... LIMIT 100
,所以你不用担心性能问题,这里
而且它的返回值是 <class 'django.db.models.query.QuerySet'>
,和 Model.objects.filter(...)
是一样的,所以你也可以使用 Model.objects.filter(...)[:100].update(...)
。