Postgresql хранимая процедура не запускается из скрипта - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть несколько хранимых процедур в базе данных postgresql, которые запускаются из сценария python. Все они выполнены одинаково, и все они работают, кроме одного. Эта хранимая процедура работает нормально, если я запускаю ее из инструмента запросов в pgAdmin, но она ничего не делает при запуске из скрипта. Это не дает ошибку; это просто ничего не делает. Предполагается удалить запись из одной таблицы и обновить поле в другой таблице.

Вот суть хранимой процедуры: https://gist.github.com/algaspar/e7cb4157d2f3f70f8b47439e2a4058a4

Вот Суть сценария: https://gist.github.com/algaspar/3fa548379203aff9d887caed3c92cb64

Я урезал сценарий до того, что не работает. По сути, он считывает файл с несколькими элементами и создает список, который он передает хранимой процедуре с executemany (мой пример просто создает список без чтения файла, но он не работает лучше :(). I может запустить процедуру в инструменте запросов с помощью:

CALL close_item('item1', CURRENT_DATE);

, и он делает то, что должен делать - удаляет запись из таблицы itemchanges и обновляет поле в таблице itemhistory. У кого-нибудь есть идея? почему я не могу запустить эту хранимую процедуру из сценария?

Спасибо -

Al

PS
Я бы очень хотел получить ответ на этот вопрос, поэтому я не делаю этот THE ответ. Я могу решить мою проблему, запустив SQL in, выполняется внутри al oop. Это завершает то, что мне нужно (решил CURRENT_DATE, так список теперь будет содержать только элементы):

       for item in my_list:
           cursor.execute ("DELETE FROM itemchanges WHERE item = %s", (item,))
       ps_connection.commit()
       for item in my_list:
           cursor.execute ("UPDATE itemhistory SET fixed_date = CURRENT_DATE WHERE item = %s AND fixed_date IS NULL", (item,))
       ps_connection.commit()

Хотелось бы узнать, почему вызов хранимой процедуры с executemany не сработал, когда хранимая процедура работала просто как запрос ...

1 Ответ

0 голосов
/ 15 февраля 2020

Коммит был необходим; Я скучал по этому вопросу. Спасибо!

Моя проблема, хотя в моем "реальном" сценарии было то, что мои элементы считывались из файла, но в моем основном примере я строил список вручную. Когда я читал элементы из файла, я получал «XXXXXX \ n», а не просто «XXXXXX». Я изменил место, где я добавил их в свой список, чтобы он был item.rstrip (), и моя хранимая процедура теперь работает нормально с cursor.executemany ():

    for item in input_file:
        load_tuple = (item.rstrip(), today)
        item_list.append(load_tuple)
    run_SQL(item_list)

В итоге, я не сравнивал яблоки с яблоки, когда я отлаживал; Мне нужно уделять больше внимания.

...