在 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 中定义的字段/列

Sql 完全外连接查询在 SQLAlchemy 中不起作用

如何在 python 中使用 sqlalchemy 在查询中创建 sql server 表变量

我不知道如何使用 sqlalchemy.create_engine 在 python 中编写 sql 查询

使用 SQL 和 Sqlalchemy 查询的表具有相同的列名