django sql线程安全吗?

时间:2016-01-28 09:54:59

标签: mysql django multithreading views

假设我有这段代码:

product = Product.objects.get(name='something')
product.number_sold += 1
product.save()

如果在查询期间number_sold为10,然后在save()之前,此代码同时运行,那么查询将再次返回10,这意味着它将保存number_sold = 11两次? 换句话说,运行此django视图的两个用户可以获得number_sold字段的相同值吗?

2 个答案:

答案 0 :(得分:4)

为了避免多线程/流程代码中的竞争条件,您应该使用F()-expressions

from django.db.models import F

product = Product.objects.get(name='something')
product.number_sold = F('number_sold') + 1
product.save()

答案 1 :(得分:3)

您可以在一个查询中执行此操作:

Product.objects.filter(name='something').update(number_sold=F('number_sold')+1)