gpt4 book ai didi

database - Django 中的原子操作?

转载 作者:太空狗 更新时间:2023-10-30 01:39:39 25 4
gpt4 key购买 nike

我正在尝试实现(我认为是)一个非常简单的计数器数据模型:

class VisitorDayTypeCounter(models.Model):
visitType = models.CharField(max_length=60)
visitDate = models.DateField('Visit Date')
counter = models.IntegerField()

当有人过来时,它会寻找与 visitType 和 visitDate 相匹配的行;如果该行不存在,将使用 counter=0 创建。

然后我们增加计数器并保存。

我担心的是这个过程完全是一场竞赛。两个请求可以同时检查实体是否存在,并且它们都可以创建实体。在读取计数器和保存结果之间,另一个请求可能会通过并增加它(导致丢失计数)。

到目前为止,我还没有真正找到解决这个问题的好方法,无论是在 Django 文档中还是在教程中(事实上,教程的投票部分似乎有竞争条件)。

我如何安全地执行此操作?

最佳答案

从 Django 1.1 开始,您可以使用 ORM 的 F() 表达式。

from django.db.models import F
product = Product.objects.get(name='Venezuelan Beaver Cheese')
product.number_sold = F('number_sold') + 1
product.save()

有关详细信息,请参阅文档:

https://docs.djangoproject.com/en/1.8/ref/models/instances/#updating-attributes-based-on-existing-fields

https://docs.djangoproject.com/en/1.8/ref/models/expressions/#django.db.models.F

关于database - Django 中的原子操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/280075/

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