Django部分更新

时间:2011-09-23 12:06:46

标签: django django-models

我有两个线程,一个运行update t set ColA=foo,另一个运行update t set ColB=foo。如果他们正在执行原始SQL语句,则不存在争用,但由于Django获取并保存整行,因此可能发生竞争条件。

有没有办法告诉Django我只想保存某个列?

3 个答案:

答案 0 :(得分:6)

更新旧主题。

现在,我们有save_fields参数和save:

  

如果save()传递了关键字参数中的字段名称列表   update_fields,只会更新该列表中指定的字段。

https://docs.djangoproject.com/en/stable/ref/models/instances/#specifying-which-fields-to-save

product.name = 'Name changed again'
product.save(update_fields=['name'])

答案 1 :(得分:3)

你是正确的save将更新整行,但Django有一个update,它完全符合你的描述。

https://docs.djangoproject.com/en/stable/ref/models/querysets/#update

答案 2 :(得分:0)

我认为保证这一点的唯一选择是使用Manager.raw()a cursor手动编写原始SQL,具体取决于哪一个更合适。