Функция Postgres - запускается из Python, записи не вставлены - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать Python для запуска функции PostgreSQL, которая вставляет данные из одной таблицы в другую.Если я запускаю функцию в pgAdmin, она работает, но если я запускаю ее через Python, я получаю возвращаемое значение, которое говорит, что оно выполнено, но не вставляет никаких записей.

Вот мой код Python

import psycopg2
from parse_config import fn_parse_config

def run_function():

  conn = None
  try:
    # read database configuration
    login_params = fn_parse_config("etl_process.ini", "psycopg_login")
    # connect to the PostgreSQL database
    conn = psycopg2.connect(**login_params)
    # create a cursor object for execution
    cur = conn.cursor()
    # another way to call a stored procedure
    #cur.execute("SELECT * FROM usp_test();")
    cur.callproc('usp_test')
    # process the result set
    row = cur.fetchone()
    while row is not None:
        print(row)
        row = cur.fetchone()
    # close the communication with the PostgreSQL database server
    cur.close()
except (Exception, psycopg2.DatabaseError) as error:
    print(error)
finally:
    if conn is not None:
        conn.close()         
if __name__ == '__main__':
     run_function()

Вот моя функция

CREATE OR REPLACE FUNCTION usp_test() 
    RETURNS integer AS $$

BEGIN 
INSERT INTO staging_raw_file (Site,
            StyleCode)
        select CAST(a.Site as VARCHAR(10)),
        CAST(a.StyleCode as VARCHAR(30))
from import_raw_file a;

return 5;

END; $$

LANGUAGE plpgsql;

1 Ответ

0 голосов
/ 23 мая 2018

Нашел ответ, ему нужно установить автокоммит

conn = psycopg2.connect(**login_params)
conn.autocommit = True

без того, чтобы он фактически не запускал вставку, но он вернет результаты только выбора без этого

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