database - Django 原子检查和递减

标签 database django concurrency locking

我有一个模型变量,我们称它为整数 .actions。这个想法是人们只有在还有行动时才能做事。

如何检查 Action 是否 > 0 并随后自动递减 Action ?我不希望他们出现负面影响。

if model.actions > 0:
  Model.objects.filter().update(actions=F('actions')-1)

我认为事务不能解决这个问题,因为它们不处理锁定。 select_for_update似乎解决了这个问题,但该文档也非常不清楚。它会与默认交易设置一起使用还是需要其他设置?

最佳答案

我得到了这个解决方案:

returnValue = MyObject.objects.filter(pk=x, points__gt=0).update(points=F('points')-1)

它仅在满足条件时更新并为您提供一个返回值,您可以检查它是否发生(这意味着这些点是否确实大于 0)。

关于database - Django 原子检查和递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15732891/

相关文章:

Android SQL 数据库 - 未找到 rawQuery() 源

phpMyAdmin 复制表

mysql - MYSQL中自动递增的列

java - 如何使用接口(interface)在 Activity 和 sqlite 数据库助手类之间进行通信

django - 如何使用对象列表过滤多个字段

python - Django:列出模型的所有反向关系

Java并发&分布式场景

scala - 控制 Akka 中消耗大量内存的 actor 的生成

django - Django Sitemaps和 “normal” View

go - 使用 sync.Cond 时所有 go routines 都处于休眠状态