Как вызвать Postgres 11 хранимых процедур из Python - PullRequest
0 голосов
/ 05 марта 2019

У меня есть процедура Postgres, которая называется sales, и она хорошо работает в 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 голосов
/ 05 марта 2019

Предполагая, что ваша процедура называется продажей, вам просто нужно "вызвать" ее, например: CALL sales()

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

Я вижу, к чему вы клоните, документация по Python здесьзаблуждение

«Вызов хранимой процедуры PostgreSQL в шагах Python» 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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...