我想更新和修改字符串字段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,則任何數據庫之間的替換函數都是非常一致的。 –