我有两个线程,一个运行update t set ColA=foo
,另一个运行update t set ColB=foo
。如果他们正在执行原始SQL语句,则不存在争用,但由于Django获取并保存整行,因此可能发生竞争条件。
有没有办法告诉Django我只想保存某个列?
答案 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,具体取决于哪一个更合适。