【问题标题】:cursort.execute/cursor.callproc returns no error but nothing is executedcursor.execute/cursor.callproc 不返回错误,但不执行任何操作
【发布时间】:2012-06-08 14:29:53
【问题描述】:

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

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

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

当尝试从 python 程序中执行相同操作时,查询需要 2 秒并且没有返回错误,我的表中什么也没有;有关信息,该语句已在 postgresqk 支持上成功执行(我可以在 pgsql 日志中看到它),这是我的代码 sn-p:

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

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

cursor.close()

【问题讨论】:

    标签: python postgresql psycopg2 psycopg


    【解决方案1】:

    解决了!

    默认情况下,psycopg2 不会在每个执行的语句上自动提交,因此一旦我关闭连接(最后),所有未决事务都将被丢弃,就像执行了 ROLLBACK 一样。

    可以在每个 cursor.execute() 或 .callproc 之后调用 conn.commit(),或者只是在全局范围内使用

    conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
    

    【讨论】:

      【解决方案2】:

      应该使用 conn.commit() 代替更改隔离级别,除非您确实需要自动提交功能。

      Python DB2 API

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多