Python cursort.execute/cursor.callproc不会返回任何错误,但不会执行任何操作

Python cursort.execute/cursor.callproc不会返回任何错误,但不会执行任何操作,python,postgresql,psycopg2,psycopg,Python,Postgresql,Psycopg2,Psycopg,当我通过psql客户端运行这个SQL查询时,它会运行几秒钟(大约90秒,这是正常的,因为它是一个巨大的表),然后返回,然后我可以检查我的行是否成功插入 SELECT merge_data('898989', '111111111', '10000') 它是一个运行更新或插入的存储过程,该过程运行时没有错误,并且我在表中获得了我的条目 当试图从python程序中执行相同操作时,查询需要2秒钟,并且不返回任何错误,我的表中没有任何内容;有关信息,该语句已在postgresqk backed上成功执

当我通过psql客户端运行这个SQL查询时,它会运行几秒钟(大约90秒,这是正常的,因为它是一个巨大的表),然后返回,然后我可以检查我的行是否成功插入

SELECT merge_data('898989', '111111111', '10000')
它是一个运行更新或插入的存储过程,该过程运行时没有错误,并且我在表中获得了我的条目

当试图从python程序中执行相同操作时,查询需要2秒钟,并且不返回任何错误,我的表中没有任何内容;有关信息,该语句已在postgresqk backed上成功执行(我可以在pgsql日志中看到),下面是我的代码片段:

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

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

cursor.close()
决心

默认情况下,psycopg2不会自动提交每个执行的语句,因此一旦我关闭连接(在末尾),所有挂起的事务都会被丢弃,就像执行了回滚一样

可以在每个游标.execute()或.callproc之后调用conn.commit(),或者使用

conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
除非您确实需要自动提交功能,否则应该使用conn.commit()来更改隔离级别