database - SqlAlchemy - 如何根据保存为 NestedMutableJson 的键属性查询表
问题描述
假设 Postgres 用户表包含 NestedMutableJson 类型的属性。
first_name character varying (120)
last_name character varying (120
country_info NestedMutableJson
...
from sqlalchemy_json import NestedMutableJson
country_info = db.Column(NestedMutableJson, nullable=True)
country_info = {“名称”:“英国”,“代码”:“11”}
如何根据 country_info 键查询用户表。
POSTGRES 查询
SELECT * FROM user WHERE country_info ->> 'name' = 'UK'
是否有任何 SqlAlchemy 方式给出相同的查询结果?
我尝试了几种方法,例如:
方式一:
User.query.filter(User.country_info['name'].astext == 'UK').all()
错误:
Operator 'getitem' is not supported on this expression
方式二:
User.query.filter(User.country_info.op('->>')('name') == 'UK').all()
问题:
Always getting an empty response
我想知道是否由列定义引起的问题db.Column(NestedMutableJson, nullable=True)
我避免使用 db.session.execute("SELECT * FROM user WHERE country_info ->> 'name' = 'UK'").fetchall()。寻找别的东西
解决方案
只需使用允许您在 orm 进程中编写纯文本过滤器的文本,它的工作方式类似于dict的get函数,并且它也可以处理None字段。
User.query.filter(text("COALESCE(user.country_info ->> 'name', '') = 'UK'")).all()
注意表的名字应该是数据库中的真实名字
推荐阅读
- excel - 如何过滤多维数据集函数中的日期范围?
- go - How to add padding, font size and colours to fyne UI app
- angular - ngx-charts-line-chart 几分钟后冻结
- javascript - 我无法运行多维数据集 js 后端服务器
- flutter - flutter statfulWidget刷新两次
- windows - 使用makefile进行Latex编译的Noob问题
- java - 从资产中打开 pdf
- javascript - 日历控制如何传递日期、开始日期和结束日期
- spring-boot - spring boot 可以有多个@SpringBootTest 类吗?
- swagger - 按控制器名称排序 (Swagger) .NET Core