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