我正在处理一个需要在json字段上进行筛选的查询,当我使用相等的运算符进行比较时,它也在工作
User.query.filter(text("COALESCE(user.country_info ->> 'name', '') = 'UK'")).all()
但是当我使用类似的运算符search_value = '%{}%'.format(text_search)
时,文本搜索是类似'united'的字符串,它不起的作用
User.query.filter(text(f"COALESCE(user.country_info ->> 'name', '') like '{search_value}'")).all()
当我用文本打印查询时,我看到我得到了类似的东西
user.country_info ->> 'name' Like '%%united%%'
如果我删除%符号,则查询变为
user.country_info ->> 'name' Like 'united'
这里有帮助吗
找到了正确的方法,我不得不使用sqlalchmey表达式bindparam
from sqlalchemy.sql.expression import bindparam
from sqlalchemy.types import String
search_value = "%{}%".format(search_value)
search_param = bindparam('search_text', search_value, String)
User.query.filter(text(f"COALESCE(user.country_info ->> 'name', '') like :search_text").bindparams(search_param)).all()