首页 > 解决方案 > 如何在 SELECT 查询中将列列表包装到数组中?

问题描述

我有一个查询,我正在尝试使用 SQLAlchemy 对 postgres 数据库进行查询。

这是我的查询:

select id, array_remove(ARRAY[a.value1, b.value2, etc.], null) FROM table t
JOIN a on t.id = a.id
JOIN b on t.id = b.id

这提供了一个返回,其中第二列是来自不同表的值数组。目标是让这些列以逗号分隔的单个列值表示。

在 SQL Alchemy 中,我正在生成这些表,因此我有一个 Column 对象本身的列表。当我构建我的查询时,我已经得到了连接和诸如此类的东西,但是我如何构造代码以便我传递我的列列表并产生预期的“ARRAY [column1,column2,等等]”我希望在 SQL 中看到?

这是我目前所处的位置:

my_query.add_columns(func.array_remove(ARRAY(id_cols), null))

ARRAY 类型或数组函数(字面量)似乎都不接受列列表。我尝试将 func.cast 用于一个数组,但这也不起作用,因为它不需要列列表。使用列名的字符串列表并不理想,因为这些列可能在名称上发生冲突......我猜完全限定的名称可能没问题,但似乎也很难使用 SQLAlchemy。

标签: pythonsqlpostgresqlsqlalchemy

解决方案


推荐阅读