代码之家  ›  专栏  ›  技术社区  ›  StormRider

SQLAlchemy“平凡”

  •  2
  • StormRider  · 技术社区  · 7 年前

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

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

    其中数据列具有JSONB类型。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Kevin Languasco    4 年前

    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 是在别名中列出各个列名。

        2
  •  1
  •   mani    6 年前

    不幸的是,对该功能的支持已被移至仅支持1.5里程碑。 虽然有 a workaround ,我决定使用原始SQL来解决类似的问题。