如何使用select_for_update在Django中“获取”查询?

2024-03-28 22:59:31 发布

您现在位置:Python中文网/ 问答频道 /正文

正如Django文档所说,select_for_update返回一个Queryset。但是get没有。现在我有一个查询,我确信它只返回一个元组。但我也需要为这个事务获取锁。所以我要做的是:

ob = MyModel.objects.select_for_update().filter(some conditions)

现在我需要修改ob的一些值。但是ob是一个Queryset。这看起来很简单,但比我强。我对Django很陌生。请给我一些建议。


Tags: django文档forgetobjectsupdatesomefilter
1条回答
网友
1楼 · 发布于 2024-03-28 22:59:31

只需调用get,对其进行切片等,然后照常保存。通过事务锁定到位。

ob = MyModel.objects.select_for_update().get(pk=1)

在事务结束时提交任何更改(默认情况下,每个请求提交1.5个更改)

网友
2楼 · 发布于 2024-03-28 22:59:31

can还可以将select_for_updateget_object_or_404函数一起使用:

from django.db import transaction
from django.shortcuts import get_object_or_404

with transaction.atomic():
    obj = get_object_or_404(MyModel.objects.select_for_update(), pk=pk)
    # do some stuff with locked obj

相关问题 更多 >