psycopg2.InternalError:我如何获得更多有用的信息?

时间:2010-09-15 13:47:20

标签: python postgresql

我在Python脚本中运行此命令:

try: 
    print sql_string
    cursor.execute(sql_string)
except:
    print sys.exc_info()

得到:

(<class 'psycopg2.InternalError'>, InternalError('current transaction is aborted, commands ignored until end of transaction block\n',), <traceback object at 0x1010054d0>)

但是,如果我从psql命令行尝试sql_string,它可以正常工作。我知道脚本正在连接数据库,因为我可以运行其他命令。

如何让Python为我提供有关此命令在脚本中失败的原因的更多有用信息?

2 个答案:

答案 0 :(得分:8)

试试这个:

try:
    print sql_string
    cursor.execute(sql_string)
except Exception, e:
    print e.pgerror

如果你仍然得到“当前事务被中止,命令被忽略,直到事务结束块”,那么你的错误会进一步回到你的事务中,而这个查询只会因为先前的查询失败而失败(从而使整个事务无效) )。

pgerror的详细信息可以在http://initd.org/psycopg/docs/module.html#exceptions

的文档中找到

答案 1 :(得分:7)

您还可以拖尾postgresql的输出以查看导致错误的查询:

$ tail -f /var/log/postgresql/postgresql.log

这通常比编辑脚本来调试它更容易。