我想更新和修改字符串字段Django的ORM。等效SQL要做到这一点:Django批量更新字符串替换
UPDATE example_table SET string_field = REPLACE(string_field, 'old text', 'new text');
随着该查询,我希望old text
和old text more text
与new text
和new text more text
分别被替换,在string_field
列中的所有条目。
Bulk update()似乎很有前途,但不允许我只修改部分字段,而F() expressions只实现数字更改,而不是字符串替换。我还着眼于使用raw queries来运行上面的SQL,但这看起来像是一个横向的破解(尤其是因为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,则任何数据库之间的替换函数都是非常一致的。 –