Django的Replace函数能否一次性替换多个子串?能否单查询完成批量替换
Django Replace函数实现多子串单次替换方案
Django自带的Replace函数本身不支持一次性替换多组不同的子串,但你可以通过嵌套Replace函数的方式,把两次替换合并成单个update操作完成,不用分两次遍历数据库。
直接把第一次替换的结果作为第二次替换的输入字段即可,代码示例如下:
from django.db.models import Value from django.db.models.functions import Replace MyModel.objects.update( description=Replace( Replace("description", Value("old_1"), Value("new_1")), Value("old_2"), Value("new_2") ) )
这个写法的逻辑是:先执行内层的Replace把description里的old_1换成new_1,再把这个处理后的结果传给外层的Replace,继续替换old_2为new_2,整个过程只触发一次数据库更新操作。
如果后续需要替换更多子串,继续嵌套Replace即可,比如三个替换就再套一层,只是嵌套层数太多时可读性会下降,少量替换用这个方法完全没问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

