gpt4 book ai didi

django - Django 的 select_for_update 在同一条记录上使用两次时会死锁吗?

转载 作者:行者123 更新时间:2023-12-05 03:51:20 27 4
gpt4 key购买 nike

我有一些代码,如果嵌套调用 select_for_update() 会简单很多,但恐怕我自己陷入了僵局。

例子:

with transaction.atomic():
uu1 = UniUser.objects.select_for_update().get(pk=uupk)
with transaction.atomic():
uu2 = UniUser.objects.select_for_update().get(pk=uupk) # why no deadlock here??
uu2.bio = 'i like pizza'
uu2.save()
uu1.bio = 'i like pie'
uu1.save()

我原以为第二个 select_for_update() 会死锁,因为它试图锁定一个已经锁定的记录,但这段代码运行得很好,我们最终得到了 'i like pie' 在简历中。如果我删除内部事务并在同一事务中两次锁定同一记录,则同上。

这里为什么没有死锁呢?这是安全代码吗?

如果答案是特定于数据库的,我使用的是 Postgres。

最佳答案

锁由您的事务获取并持有。

当您尝试再次获取它时,没有任何反应,因为您的事务已经锁定了该行。

关于django - Django 的 select_for_update 在同一条记录上使用两次时会死锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62942886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com