如何表达在sqlalchemy中返回setof记录的函数?

时间:2014-07-30 20:44:33

标签: python postgresql sqlalchemy

我需要执行一个返回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)

......但我不知道如何表达。

1 个答案:

答案 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)