在 SQLAlchemy 中查询 SQL Server JSON
Posted
技术标签:
【中文标题】在 SQLAlchemy 中查询 SQL Server JSON【英文标题】:Query SQL Server JSON in SQLAlchemy 【发布时间】:2021-10-18 21:21:38 【问题描述】:我正在尝试使用 SQLAlchemy 创建此查询:
SELECT JSON_QUERY(json_field, '$.emails') FROM table
字段的样子:
"emails": ["email1","email2"...]
我有类似的东西:
session.query(func.json_query(json_field, '$.emails').all()
但看起来 json_query
不在 func 中。
任何帮助将不胜感激。
【问题讨论】:
你读过 SQLAlchemy 的 JSON 文档了吗? 我一开始没找到,我在找mssql而不是sql server。一旦有人编辑了这个问题,我就找到了它。谢谢。 【参考方案1】:看起来 json_query 不在 func 中
.func()
确实渲染了json_query
。对于名为 [json_test] 的测试表……
id json_field
-- -------------------------------
1 "emails": ["email1","email2"]
2 "emails": ["email3","email4"]
…这对我有用:
class JsonTest(Base):
__tablename__ = "json_test"
id = sa.Column(sa.Integer, primary_key=True, autoincrement=False)
json_field = sa.Column(sa.JSON)
with sa.orm.Session(engine) as session:
qry = session.query(sa.func.json_query(JsonTest.json_field, "$.emails"))
"""SQL emitted:
2021-08-16 16:24:13,203 INFO sqlalchemy.engine.Engine SELECT json_query(json_test.json_field, ?) AS json_query_1
FROM json_test
2021-08-16 16:24:13,203 INFO sqlalchemy.engine.Engine [generated in 0.00039s] ('$.emails',)
"""
results = session.execute(qry).fetchall()
print(results)
# [('["email1","email2"]',), ('["email3","email4"]',)]
【讨论】:
有趣的是,我最终通过query(Table.field['emails'])
访问了 json 以获得类似的结果。
谢谢。它呈现与答案中所述完全相同的 SQL。直到。以上是关于在 SQLAlchemy 中查询 SQL Server JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQLAlchemy 中漂亮地格式化 SQL 查询的打印?
将 SQL 查询限制为 Graphene-SQLAlchemy 中定义的字段/列
如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量