我有一个称为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.
答案 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))