You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SQLAlchemy中如何筛选jsonb列值为非空字典的行?

过滤非空JSON字典的规范实现方案

下面分两种场景给出对应方案:

场景1:availability为数据库原生JSON/JSONB类型(推荐方案)

这是最规范的实现方式,完全规避字符串匹配的各类兼容问题,性能更优,也支持后续JSON相关查询扩展:

  • PostgreSQL(JSONB类型):使用jsonb_length函数判断字典键的数量,ORM写法为:
from sqlalchemy import func

filter(func.jsonb_length(ListEntry.availability) > 0)

对应原生SQL:WHERE jsonb_length(availability) > 0

  • MySQL 8.0+:使用JSON_LENGTH函数,ORM写法为:
from sqlalchemy import func

filter(func.json_length(ListEntry.availability) > 0)

对应原生SQL:WHERE JSON_LENGTH(availability) > 0

场景2:availability为字符串类型存储序列化JSON

如果你的字段是用VARCHAR/TEXT存的JSON序列化结果,可以优化原有的字符串匹配逻辑,避免空白字符导致的匹配失效:

  • 先去除字段值前后的空白字符再匹配空字典,ORM写法为:
from sqlalchemy import func

filter(func.trim(ListEntry.availability) != '{}')

对应原生SQL:WHERE TRIM(availability) != '{}'

注:你原写法里的'"{}"'多了一层引号,大概率是JSON序列化时额外加了转义导致的,建议先确认字段存储的实际格式,避免匹配逻辑和实际存储格式不匹配。


内容的提问来源于stack exchange,提问作者Olly Middleton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:04