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

Toh*_*Toh 7 python postgresql stored-procedures psycopg2 python-3.x

我在 Postgres 中有一个名为 的存储过程sales,它运行良好pgadmin

CALL sales();
Run Code Online (Sandbox Code Playgroud)

但是,当我从 Python 调用它时:

import psycopg2
conn = psycopg2.connect (host ....)
cur = conn.cursor()
cur.callproc('sales')
conn.commit()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

CALL sales();
Run Code Online (Sandbox Code Playgroud)

Luc*_*cas 12

假设您的程序称为销售,您只需要“调用”它,例如 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))