关于python:如何原子地查询和更新django模型中的一些记录集?

How to query and update some record set in django models atomically?

我在django模型中有一些记录,每次我想要查询和更新其中的一些记录。如何自动执行此操作?

1
2
3
4
5
6
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
Model.objects.filter(...).update(count=F('count') + 1)

这是医生。

如果要将QuerySet的大小限制为100,请使用Model.objects.filter(...)[:100]。它将被翻译成SELECT ... LIMIT 100,所以您不必担心性能,这里还有一个问题。

它的返回值是,与Model.objects.filter(...)相同,所以你也可以使用Model.objects.filter(...)[:100].update(...)