SQLAlchemy“有序”

时间:2018-09-03 08:47:59

标签: python postgresql sqlalchemy

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

SELECT * FROM table_persons, jsonb_array_elements(data->'persons') WITH ORDINALITY as persons (data, n);

数据列具有JSONB类型。

2 个答案:

答案 0 :(得分:1)

截至 2021 年 7 月的更新

SQLAlchemy 1.4 引入了 table-valued functions,支持 WITH ORDINALITY

对于问题中的示例:

SELECT *
FROM
    table_persons
,   jsonb_array_elements(data->'persons') WITH ORDINALITY AS persons (data, n)

对应的 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)

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

答案 1 :(得分:0)

很遗憾,此功能的支持仅移至1.5个里程碑。 尽管有a workaround,但我还是决定使用原始SQL来解决类似的问题。