【问题标题】:How to change db objects thread safely in django?如何在 django 中安全地更改数据库对象线程?
【发布时间】:2016-03-18 20:29:01
【问题描述】:

例如,我有一个模型:

class Model1(models.Model):
   is_free = models.BooleanField(default=True)
   rel_object = models.ForeignKey(Model2, null=True, default=None)

有些对象被设置为“免费”。我想获取第一个并将其设置为“非空闲”线程安全(我需要保证其他线程不能同时更改此对象):

model1 = Model1.objects.filter(is_free=True).first()
model1.is_free = False
model2.rel_object = model2
model2.save()

怎么做?

【问题讨论】:

  • 您是说数据库中有多个实例代表同一行吗?或者每行有多个实例,并且您想确保第一个(“第一个”是什么意思?)不能更改为“非免费”?

标签: django concurrency django-database


【解决方案1】:

您可能对select_for_update 感兴趣。这使您可以锁定行直到事务提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2018-06-08
    • 1970-01-01
    • 2011-03-12
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多