PL / PGSQL功能,无法存取从psycopg2一个返回的结果集
-
27-09-2019 - |
题
我有这样的PL / pgSQL函数:
CREATE OR REPLACE FUNCTION get_result(id integer) RETURNS SETOF my_table AS $
DECLARE
result_set my_table%ROWTYPE;
BEGIN
IF id=0 THEN
SELECT INTO result_set my_table_id, my_table_value FROM my_table;
ELSE
SELECT INTO result_set my_table_id, my_table_value FROM my_table WHERE my_table_id=id;
END IF;
RETURN;
END;
$ LANGUAGE plpgsql;
我试图用Python的psycopg2库使用。下面是Python代码:
import psycopg2 as pg
conn = pg.connect(host='myhost', database='mydatabase', user='user', password='passwd')
cur = conn.cursor()
return cur.execute("SELECT * FROM get_result(0);") # returns NoneType
但是,如果我只是做了常规查询,我得到正确的行集的后面:
...
return cur.execute("SELECT my_table_id, my_table_value FROM mytable;") # returns iterable result set
即使世界显然是错误的东西与我的PL / pgSQL函数,但我似乎无法得到它的权利。
我使用也尝试
RETURN result_set;
,而不是仅仅
RETURN
在我的PLPGSQL功能的第10行,但得到了来自postgres的错误。
解决方案
请阅读当你改变你得到错误“RETURN”;到 “RETURN result_set;”。然后阅读以下 - “38.6.1.2 RETURN NEXT和RETURN QUERY“。
有一个提示 - 你的情况,你需要“返回查询”
不隶属于 StackOverflow