sqlalchemy使用文本和类似json列进行过滤



我正在处理一个需要在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()

最新更新