我需要执行一个返回setof记录类型的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)
......但我不知道如何表达。
答案 0 :(得分:1)
看来你不能:
来自http://docs.sqlalchemy.org/en/rel_0_9/core/functions.html#sqlalchemy.sql.functions.func
func构造对调用独立“存储过程”的支持有限,特别是那些有特殊参数化问题的那些。
有关如何对完全传统的存储过程使用DBAPI级callproc()方法的详细信息,请参阅Calling Stored Procedures部分。
显然,你可以回归到普通的SQL插值:
>> print sa.select().select_from('a AS f(a int, b int)')
SELECT
FROM a AS f(a int, b int)