2012-06-08 128 views
3

当我通过psql客户端运行此SQL查询它运行几秒钟(约90秒,这是正常的,因为它是一个巨大的表),它返回,然后我可以检查我的线路是否已成功插入。cursort.execute/cursor.callproc返回没有错误,但没有任何执行

SELECT merge_data('898989', '111111111', '10000') 

这是一个运行UPDATE或INSERT的存储过程,该过程运行时没有错误,并且我在表中获得了我的条目。

当试图从一个python程序做同样的事情时,查询需要2秒钟,并且没有返回错误,我在我的表中什么都没有;有关信息,该语句是成功的支持(我可以看到它的pgsql日志)postgresqk执行,这是我的代码片段:

conn = psycopg2.connect("...") 
cursor = conn.cursor() 

try: 
    cursor.callproc("merge_data", ['898989', '111111111', '10000']) 
except: 
    print "ERROR !" 

cursor.close() 

回答

4

已解决!

默认情况下,psycopg2对每个执行的语句都不autocommit,所以一旦我关闭连接(在最后),所有挂起的事务都将被丢弃,就像执行了ROLLBACK一样。每个cursor.execute()或.callproc后

一个可以调用conn.commit(),或只是将其设置为使用

conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) 
-3

你是不是叫cursor.execute()实际执行的SQL。

+0

cursor.callproc全局范围()正在执行的声明,无论如何,即使cursor.execute(“SELECT merge_date ....”)也具有相同的效果 –

相关问题