Django 如何正确增加postgreSQL数据库中的计数器?

Django 如何正确增加postgreSQL数据库中的计数器?,django,postgresql,django-rest-framework,Django,Postgresql,Django Rest Framework,假设我想在我的应用程序中实现一个“喜欢/不喜欢”系统。我需要数一数,以便以后分类。我可以简单地插入当前值+1吗?我觉得太简单了 如果两个用户同时单击怎么办?如何防止我的柜台被打扰 我读到我需要通过一个简单的decorator实现事务@transaction.atomic,但我想知道这是否能解决我的问题 事务被设计为执行由一个用户触发的一组操作,而在我的例子中,我需要能够同时处理多个请求并安全地更新计数器 有什么建议吗?您可以使用F()表达式,例如 content.likes_count = F(

假设我想在我的应用程序中实现一个“喜欢/不喜欢”系统。我需要数一数,以便以后分类。我可以简单地插入当前值+1吗?我觉得太简单了

如果两个用户同时单击怎么办?如何防止我的柜台被打扰

我读到我需要通过一个简单的decorator实现事务
@transaction.atomic
,但我想知道这是否能解决我的问题

事务被设计为执行由一个用户触发的一组操作,而在我的例子中,我需要能够同时处理多个请求并安全地更新计数器

有什么建议吗?

您可以使用F()表达式,例如

content.likes_count = F('likes_count') + 1
content.save()
因此,该操作将在数据库中执行,而不是在python中

来自django

F()的另一个有用的好处是拥有数据库,而不是 而Python—更新字段的值可以避免竞争条件

如果两个Python线程执行上面第一个示例中的代码,那么一个 线程可以在 其他人已从数据库中检索到它。第二个 线程保存将基于原始值;委员会的工作 第一个线程将丢失

如果数据库负责更新字段,则该过程是 更健壮:它只会根据 执行save()或update()时数据库中的字段, 而不是基于检索实例时的值


谢谢你的提示。这看起来像是我在寻找的。