【问题标题】:Django partial updateDjango 部分更新
【发布时间】:2011-09-23 12:06:45
【问题描述】:

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

有什么方法可以告诉 Django 我只想保存某一列?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    更新旧主题。

    现在,我们有了带有 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'])
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我已更新链接以使用最新的稳定版本。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-04-27
        • 2014-02-03
        • 2020-04-12
        • 2021-12-21
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 2020-09-29
        相关资源
        最近更新 更多