使用PostgreSQL/SqlAlchemy选择数组的第一项

2024-10-02 22:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试将我每天运行的一些查询移动到自动脚本中。我有一个博士后,如下所示:

SELECT regexp_split_to_array(col1, "|")[1] AS item, COUNT(*) AS itemcount FROM Tabel1 GROUP BY item ORDER BY itemcount

在SqlAlchemy中我有这样一个:

^{pr2}$

Python不能“get_item”,因为它实际上不是一个集合。我浏览了文档,似乎找不到什么东西可以让我在不使用execute运行原始SQL的情况下完成这项工作(我可以做,也可以工作,但我正在寻找下一次的解决方案)。在


Tags: tofrom脚本byascountgroupitem
1条回答
网友
1楼 · 发布于 2024-10-02 22:25:20

SQLAlchemy支持使用[...]建立索引。如果声明列的类型必须是postgresql.ARRAY类型,则它可以工作:

table2 = Table("table2", meta, Column("col1", postgresql.ARRAY(String)))
q = session.query(table2.c.col1[1])
print(q.statement.compile(dialect=postgresql.dialect()))
# SELECT table2.col1[%(col1_1)s] AS anon_1 
# FROM table2

代码不能工作的原因是SQLAlchemy不知道func.regexp_split_to_array(...)返回一个数组,因为func.foo为了方便而生成了一个泛型函数。为了使其工作,我们需要通过指定type_参数来确保SQLAlchemy知道函数的返回类型:

^{pr2}$

相关问题 更多 >