2015-05-08 4 views
0

У меня есть функция Postgresql, как показано ниже:Как выполнить Postgresql функции из Python

CREATE OR REPLACE FUNCTION accdisvalues(thisdate date) 
    RETURNS void AS 
$BODY$ 
    Update my_table 
    Set 
    mycolumn = true 
    where mydatecol = thisdate; 
$BODY$ 
    LANGUAGE sql VOLATILE SECURITY DEFINER 
    COST 100; 
ALTER FUNCTION accdisvalues(date) 
    OWNER TO myconnect; 

Всякий раз, когда я запускаю его с PG AdminIII он работает отлично и значения обновляются в таблице.

Я пытаюсь запустить его из Python 3 с приведенным ниже кодом, и код запускается без ошибки, но обновление не выполняется в таблице. Может ли кто-нибудь помочь мне решить, что может быть проблемой? Большое спасибо.

import easygui 
import dbconnex 
    setdate = '30-Dec-2014' 
    accdisupdate_fn = "Select accdisvalues('" + setdate + "');" 
    print(accdisupdate_fn) 
    cursor = dbconnex.conn.cursor() 
    cursor.execute(accdisupdate_fn) 
    easygui.msgbox(msg='Data loaded successfully for ' + setdate ,title="Input Status") 
+0

Есть ли запись в файл журнала PG почему обновление не произошло? – Patrick

+1

Просто сделайте это. –

+0

Выключается после выполнения инструкции курсора, вам нужно запустить conn.commit() для завершения. Большое спасибо за вашу помощь. – Avagut

ответ

0

Полный исправленный код Python ниже:

import easygui 
import dbconnex 
    setdate = '30-Dec-2014' 
    accdisupdate_fn = "Select accdisvalues('" + setdate + "');" 
    print(accdisupdate_fn) 
    cursor = dbconnex.conn.cursor() 
    cursor.execute(accdisupdate_fn) 
    **dbconnex.conn.commit** #Pushes all changes to the DB 
    easygui.msgbox(msg='Data loaded successfully for ' + setdate ,title="Input Status") 

Смотрите здесь: http://initd.org/psycopg/docs/connection.html#connection.commit