SQLAlchemy“有序”

Sto*_*der 5 python postgresql sqlalchemy

我想用 SQLAlchemy 翻译以下查询,但我在文档中没有找到有关此主题的任何内容。

SELECT * FROM table_persons, jsonb_array_elements(data->'persons') WITH ORDINALITY as persons (data, n);
Run Code Online (Sandbox Code Playgroud)

其中数据列具有 JSONB 类型。

Kev*_*sco 1

截至 2021 年 7 月更新

SQLAlchemy 1.4 引入了表值函数,支持WITH ORDINALITY.

对于问题中的例子:

SELECT *
FROM
    table_persons
,   jsonb_array_elements(data->'persons') WITH ORDINALITY AS persons (data, n)
Run Code Online (Sandbox Code Playgroud)

相应的 SQLAlchemy 代码是

person_elements = (
    func.jsonb_array_elements(table_persons.c.data["persons"])
    .table_valued("data", with_ordinality="n", name="persons")
    .render_derived()
)
query = select(table_persons, person_elements)
Run Code Online (Sandbox Code Playgroud)

调用render_derived是列出别名中的各个列名称。