如何在 Django 中安全地更改数据库对象线程?
How to change db objects thread safely in django?
比如我有一个模型:
class Model1(models.Model):
is_free = models.BooleanField(default=True)
rel_object = models.ForeignKey(Model2, null=True, default=None)
有些对象设置为"free"。我想获取第一个并将其设置为 "not free" 线程安全(我需要保证其他线程不能同时更改此对象):
model1 = Model1.objects.filter(is_free=True).first()
model1.is_free = False
model2.rel_object = model2
model2.save()
怎么做?
您可能对 select_for_update
感兴趣。这使您能够锁定该行,直到事务被提交。
比如我有一个模型:
class Model1(models.Model):
is_free = models.BooleanField(default=True)
rel_object = models.ForeignKey(Model2, null=True, default=None)
有些对象设置为"free"。我想获取第一个并将其设置为 "not free" 线程安全(我需要保证其他线程不能同时更改此对象):
model1 = Model1.objects.filter(is_free=True).first()
model1.is_free = False
model2.rel_object = model2
model2.save()
怎么做?
您可能对 select_for_update
感兴趣。这使您能够锁定该行,直到事务被提交。