SQLAlchemy中in_()过滤JSON字段features['items']返回0的问题求助
问题原因
你遇到的问题是因为SQLAlchemy对JSON类型字段的in_()方法处理逻辑和普通字段不同。当直接对Data.features['items']调用in_(["a","b"])时,生成的SQL语句并不是检查JSON字段的文本值是否在目标数组中,而是错误地将JSON元素与整个数组进行匹配,导致没有符合条件的结果。而单独查询单个值时,是简单的等于比较,所以能正常返回结果。
解决方法
有两种可行的解决方式:
方式一:将JSON字段转为文本类型后使用
in_()
通过astext方法把JSON元素转换为字符串类型,再调用in_(),这样生成的SQL会正确生成IN子句:data.filter(Data.features['items'].astext.in_(["a","b"]))方式二:用
or_拼接多个等于条件
直接把单个值的过滤条件用or_组合起来,效果和预期一致:from sqlalchemy import or_ data.filter(or_(Data.features['items'] == 'a', Data.features['items'] == 'b'))
这两种方式都能正确筛选出items值为a或b的4条数据。
内容的提问来源于stack exchange,提问作者parastoo
相关产品推荐
相关产品推荐

