在 Django 中,我可以进行如下所示的查询:
from django.db.models import Value
from django.db.models.functions import Replace
MyModel.objects.update(description=Replace("description", Value("old_1"), Value("new_1")))
MyModel.objects.update(description=Replace("description", Value("old_2"), Value("new_2")))
第一个.update
将遍历数据库,在描述字段中查找“old_1”子字符串,并将其替换为“new_1”子字符串。第二个 .update
调用将对 old_2
子字符串执行相同的操作,并将其替换为 new_2
子字符串。
这可以在单个查询中完成吗?
最佳答案
您可以执行Replace
[Django-doc]两次:
from django.db.models import Value
from django.db.models.functions import Replace
MyModel.objects.update(
description=Replace(
Replace('description', Value('old<sub>1</sub>'), Value('new<sub>1</sub>')),
Value('old<sub>2</sub>'),
Value('new<sub>2</sub>'),
)
)
我们可以创建一个实用函数来构建这样的表达式:
from functools import reduce
from django.db.models.functions import Replace
def MultiReplace(expr0, *kvs):
return reduce(lambda e, kv: Replace(e, *kv), kvs, expr0)
然后我们可以将它们嵌套:
MyModel.objects.update(
description=MultiReplace(
'description',
(Value('old1'), Value('new1')),
(Value('old2'), Value('new2')),
)
)
关于python - Django的Replace可以用来一次替换多个子字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75061330/