【发布时间】:2014-02-23 06:04:50
【问题描述】:
我正在尝试更新和修改 Django 的 ORM 字符串字段。执行此操作的等效 SQL 是:
UPDATE example_table SET string_field = REPLACE(string_field, 'old text', 'new text');
通过该查询,对于string_field 列中的所有条目,我希望old text 和old text more text 分别替换为new text 和new text more text。
Bulk update() 看起来很有希望,但不允许我只修改部分字段,F() expressions 只实现数字更改,而不是字符串替换。我还研究了使用raw queries 来运行上面的 SQL,但这似乎是一个横向的 hack(特别是因为 F() 存在对数字执行相同的功能),我无法让它们实际执行。
我最终得到了这个,但是当我知道有一条 SQL 语句可以执行时,执行所有额外的查询似乎很可惜。
for entry in ExampleModel.objects.all():
entry.string_field = entry.string_field.replace('old text', 'new text', 1)
entry.save()
在 Django 的字符串 ORM 中还没有这个功能吗?我在文档中忽略了什么?
相关的 SO 问题:
【问题讨论】:
-
我把这个问题带回来了。我能找到的最好方法是在 Python 代码中进行字符串处理。如果您不介意使用原始 SQL,则替换功能在任何数据库之间都非常一致。
标签: python django django-orm