Django 避免比赛条件
示例
如果您不知道比赛条件是什么,请参阅此问答问题。
以下代码可能会受竞争条件的影响:
article = Article.objects.get(pk=69) article.views_count += 1 article.save()
如果views_count等于1337,将导致这样的查询:
UPDATE app_article SET views_count = 1338 WHERE id=69
如果两个客户端同时访问此文章,则可能会发生第二个HTTP请求Article.objects.get(pk=69)在第一个执行之前执行。因此,两个请求都将具有,增加它并保存到数据库,而实际上应该是。article.save()views_count=1337views_count=13381339
要解决此问题,请使用F()表达式:
article = Article.objects.get(pk=69)
article.views_count = F('views_count') + 1
article.save()另一方面,这将导致这样的查询:
UPDATE app_article SET views_count = views_count + 1 WHERE id=69
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短