【问题标题】:Django ORM - .update(…) with an extra(…) and F(…)Django ORM - .update(...) 带有额外的(...) 和 F(...)
【发布时间】:2012-11-14 21:41:12
【问题描述】:

我想做一个 sql 查询来更新 Django 站点中的许多模型。我想将一个字符列/字段更改为基于 id 和一些文本,在 MySQL(这个站点是)中,我会用"UPDATE table SET blah = 'prefix'||id||'suffix'" 来做到这一点。

我在 Django 中的第一次尝试是:

Model.objects.update(blah='prefix'+F('id')+'suffix')

但这试图给 MySQL 一个 +,而不是一个 || 运算符。

我的下一个尝试是像这样使用.extra(…)

Model.objects.extra(select={'newvalue':'"prefix"||id||"suffix"'}).update(blah=F('new_value'))

F(…) 无法从选择中看到新字段。

有没有办法在不分解为原始 SQL 的情况下做到这一点?

【问题讨论】:

    标签: python django django-models django-queryset django-orm


    【解决方案1】:

    如果我理解你的问题,这可能会有所帮助:

    blah = '%s %s %s' %(prefix, id, suffix)
    
    Model.object.update(blah=blah)
    

    【讨论】:

    • 否,此解决方案将为所有对象设置相同的值,TS 希望根据对象 ID 设置唯一值。要使此解决方案有效,您需要一个 for 循环
    【解决方案2】:

    不。 Django 的 ORM 是多数据库编译器。它没有附带像这样的自定义数据库功能。

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2020-11-06
      • 2021-09-25
      • 1970-01-01
      • 2011-05-19
      • 2021-10-20
      • 2015-01-05
      • 2016-10-18
      • 2017-07-31
      相关资源
      最近更新 更多