Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用Psycopg2调用返回记录的Postgres过程_Postgresql_Stored Procedures_Psycopg2 - Fatal编程技术网

Postgresql 使用Psycopg2调用返回记录的Postgres过程

Postgresql 使用Psycopg2调用返回记录的Postgres过程,postgresql,stored-procedures,psycopg2,Postgresql,Stored Procedures,Psycopg2,我有一个Postgres过程,其返回类型是setofrecord。该过程接受多个参数,包括一个是列表的参数和两个是日期时间的参数。我想从psycopg2调用这个过程。我收到以下错误消息: 返回“record”的函数需要列定义列表 我们希望从存储过程返回的列是动态的(基于用户输入),因此我们不希望使用out参数、RETURN TABLE、RETURN SETOF或任何其他需要在过程定义时声明返回类型的内容。使返回列动态的唯一方法是: 使用psycopg调用返回一组记录的存储过程的最佳方法是什么?

我有一个Postgres过程,其返回类型是
setofrecord
。该过程接受多个参数,包括一个是列表的参数和两个是日期时间的参数。我想从psycopg2调用这个过程。我收到以下错误消息:

返回“record”的函数需要列定义列表

我们希望从存储过程返回的列是动态的(基于用户输入),因此我们不希望使用out参数、RETURN TABLE、RETURN SETOF或任何其他需要在过程定义时声明返回类型的内容。使返回列动态的唯一方法是:

使用psycopg调用返回一组记录的存储过程的最佳方法是什么?我们提出了这个代码,它似乎有效,但不确定它是否推荐:


cursor.execute([12561],start,end))

我认为您的解决方案很好。它与Postgres doc在SELECT语句的FROM子句中使用函数时显示的样式相匹配

他们的示例显示了在有列定义列表和无列定义列表的情况下调用它:

似乎psycopg2(或者它所包装的底层libpq)需要后一种形式,以及定义


文档链接:

我想调用返回游标的postgres函数。
代码如下:

con = psycopg2.connect("connection string")
cur = con.cursor()
cur.execute("BEGIN")
cur.execute("SELECT * FROM **SP NAME WITH PARAMETER**;")
cur.execute("FETCH ALL from records;") // records is the cursor defined in function   
items = cur.fetchall()  
con = psycopg2.connect("connection string")
cur = con.cursor()
cur.execute("BEGIN")
cur.execute("SELECT * FROM **SP NAME WITH PARAMETER**;")
cur.execute("FETCH ALL from records;") // records is the cursor defined in function   
items = cur.fetchall()