如何在Django模型中原子性地查询和更新记录集?

0 投票
1 回答
715 浏览
提问于 2025-04-18 12:53

我在一个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(...)

撰写回答