Python 如何在sqlalchemy中表示返回一组记录的函数?

Python 如何在sqlalchemy中表示返回一组记录的函数?,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我需要执行一个pg函数,返回一组记录类型。 以下是postgres中的函数: CREATE OR REPLACE FUNCTION testfunction(text, text) RETURNS SETOF RECORD AS 'select * from test;' LANGUAGE sql; 下面是python: import sqlalchemy as sa from sqlalchemy.sql import * engine = sa.create_engine('pos

我需要执行一个pg函数,返回一组记录类型。 以下是postgres中的函数:

CREATE OR REPLACE FUNCTION testfunction(text, text)
RETURNS SETOF RECORD AS
   'select * from test;'
LANGUAGE sql;
下面是python:

import sqlalchemy as sa
from sqlalchemy.sql import *

engine = sa.create_engine('postgresql://localhost/test')
conn = engine.connect()
f = func.testfunction('a', 'b')
conn.execute(select([column('a', sa.types.Integer)]).select_from(f))
我需要说的是:

SELECT a FROM testfunction('a', 'b') AS (a integer)
…但我不知道如何表达

看来您不能:

func构造对调用独立“存储过程”的支持有限,特别是那些具有特殊参数化问题的过程

有关如何对完全传统的存储过程使用DBAPI级别的callproc()方法的详细信息,请参见本节

显然,您可以回到普通SQL插值:

>> print sa.select().select_from('a AS f(a int, b int)')
SELECT  
FROM a AS f(a int, b int)

旁白:不要引用语言名称:
语言sql
。我明白了。。。引号用于向后兼容。没多久就想出来了,但是下次让我知道为什么我应该/不应该做某事。谢谢。严格地说,报价是不正确的。语言名称是标识符,而不是字符串。它之所以被容忍,是因为旧(坏)习惯难以改变。事情一直是这样的。。几乎永远。没有更多的“向后兼容性”了。将来的版本可能需要正确的语法。所以,你最好保持向前兼容。我已经修了这么多次了,我已经厌倦了它,所以很短的通知。你能解释一下为什么我不能吗?没有办法将
表示为(type1,type2,…)
子句吗?我也没有在storedproc函数中看到太多答案。这有什么帮助?你能举个例子吗?事实上,似乎没有办法创建
AS(type list)
子句。