我还没有找到从返回 TABLE 的 postgres 函数返回数据的方法:
CREATE OR REPLACE FUNCTION doc_codes(device_id TEXT) RETURNS TABLE("name" TEXT, "suffix" TEXT) AS $$
SELECT name, prefix_fordevice(name, device_id) AS pf FROM doccode;
$$ LANGUAGE SQL;
使用:
f = sq.sql.text("SELECT name, suffix FROM doc_codes(:deviceId)")
return self.con.execute(f, deviceId=deviceId)
或者
f = sq.sql.func.doc_codes(deviceId, type_=types.String)
return self.con.execute(
select([sq.Column('name', types.String), sq.Column('suffix', types.String)]). \
select_from(f)
).fetchall()
我收到错误 (ProgrammingError) 返回“记录”的函数需要列定义列表
。
使用 f = sq.sql.func.doc_code(deviceId, type_=types.String)
我得到 No function matches the given name and argument types.您可能需要添加显式类型转换
,并且生成的 SQL 是 SELECT doc_code('1') AS doc_code_1
,而不是 SELECT * FROM
。
如果生成表,我无法将 deviceId 传递给表名...现在我能做什么?
最佳答案
函数定义实际上必须是 RETURNS SETOF RECORD
而不是 RETURNS TABLE
才能产生该错误。
如果您确实需要使用 RETURNS SETOF RECORD
来执行此操作,则必须使用列定义列表来调用它,如错误消息所述:
a column definition list is required for functions returning "record"
参见 the documentation .您可以使用 OUT
参数(相当于 RETURNS TABLE
),或者使用列列表调用,例如:
SELECT name, suffix
FROM doc_codes(:deviceId) AS dc("name" TEXT, "suffix" TEXT)
关于postgresql - 使用 sqlalchemy 如何调用返回表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245354/