Django 如何正确增加postgreSQL数据库中的计数器?
假设我想在我的应用程序中实现一个“喜欢/不喜欢”系统。我需要数一数,以便以后分类。我可以简单地插入当前值+1吗?我觉得太简单了 如果两个用户同时单击怎么办?如何防止我的柜台被打扰 我读到我需要通过一个简单的decorator实现事务Django 如何正确增加postgreSQL数据库中的计数器?,django,postgresql,django-rest-framework,Django,Postgresql,Django Rest Framework,假设我想在我的应用程序中实现一个“喜欢/不喜欢”系统。我需要数一数,以便以后分类。我可以简单地插入当前值+1吗?我觉得太简单了 如果两个用户同时单击怎么办?如何防止我的柜台被打扰 我读到我需要通过一个简单的decorator实现事务@transaction.atomic,但我想知道这是否能解决我的问题 事务被设计为执行由一个用户触发的一组操作,而在我的例子中,我需要能够同时处理多个请求并安全地更新计数器 有什么建议吗?您可以使用F()表达式,例如 content.likes_count = F(
@transaction.atomic
,但我想知道这是否能解决我的问题
事务被设计为执行由一个用户触发的一组操作,而在我的例子中,我需要能够同时处理多个请求并安全地更新计数器
有什么建议吗?您可以使用F()表达式,例如
content.likes_count = F('likes_count') + 1
content.save()
因此,该操作将在数据库中执行,而不是在python中
来自django
F()的另一个有用的好处是拥有数据库,而不是
而Python—更新字段的值可以避免竞争条件
如果两个Python线程执行上面第一个示例中的代码,那么一个
线程可以在
其他人已从数据库中检索到它。第二个
线程保存将基于原始值;委员会的工作
第一个线程将丢失
如果数据库负责更新字段,则该过程是
更健壮:它只会根据
执行save()或update()时数据库中的字段,
而不是基于检索实例时的值
谢谢你的提示。这看起来像是我在寻找的。