我在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为我提供有关此命令在脚本中失败的原因的更多有用信息?
答案 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
这通常比编辑脚本来调试它更容易。