【发布时间】:2011-09-23 12:06:45
【问题描述】:
我有两个线程,一个运行update t set ColA=foo 之类的东西,另一个运行update t set ColB=foo。如果他们正在执行原始 SQL 语句,则不会发生争用,但是由于 Django 获取并保存了整行,因此可能会发生竞争条件。
有什么方法可以告诉 Django 我只想保存某一列?
【问题讨论】:
标签: django django-models
我有两个线程,一个运行update t set ColA=foo 之类的东西,另一个运行update t set ColB=foo。如果他们正在执行原始 SQL 语句,则不会发生争用,但是由于 Django 获取并保存了整行,因此可能会发生竞争条件。
有什么方法可以告诉 Django 我只想保存某一列?
【问题讨论】:
标签: django django-models
更新旧主题。
现在,我们有了带有 save 的 update_fields 参数:
如果 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'])
【讨论】:
save 将更新整行是正确的,但 Django 有一个 update,它完全符合您的描述。
https://docs.djangoproject.com/en/stable/ref/models/querysets/#update
【讨论】:
我认为保证这一点的唯一选择是使用 Manager.raw() 或 a cursor 手动编写原始 SQL,具体取决于哪个更合适。
【讨论】: