如何从Python调用Postgres 11存储过程

时间:2019-03-05 09:55:38

标签: python python-3.x postgresql stored-procedures

我有一个称为Sales的Postgres程序,可以在pgadmin中通过

正常运行
CALL sales();

但是,当从python脚本调用时,我遇到错误...如下

import psycopg2
conn = psycopg2.connect (host ....)
cur = conn.cursor()

cur.callproc('sales')
conn.commit()

错误消息如下:

psycopg2.ProgrammingError: sales() is a procedure
LINE 1: SELECT * FROM sales()
                 ^   
HINT:  To call a procedure, use CALL.

1 个答案:

答案 0 :(得分:0)

假设您的过程称为销售,则只需“调用”它,例如CALL sales()

https://www.postgresql.org/docs/11/sql-call.html

我明白您的意思,这里的python文档具有误导性

“在Python步骤中调用PostgreSQL存储过程” http://www.postgresqltutorial.com/postgresql-python/call-stored-procedures/

基本上,callproc当前已过时(为postgres 10及更低版本编写),并且仍将过程视为函数。因此,除非他们对此进行更新,否则您将需要在这种情况下像这样执行您自己的SQL

cur.execute("CALL sales();")

或如果销售过程需要输入:

cur.execute("CALL sales(%s, %s);", (val1, val2))