我想用SQLAlchemy翻译以下查询,但是我在文档中找不到关于此主题的任何内容。
SELECT * FROM table_persons, jsonb_array_elements(data->'persons') WITH ORDINALITY as persons (data, n);
数据列具有JSONB类型。
答案 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来解决类似的问题。