sir*_*004 11 python postgresql psycopg2
这是我第一个广泛使用psycopg2的项目.我试图找到一种方法来提取psql错误消息,无论何时连接尝试失败.我已经测试过,如果所有变量都设置正确,下面的代码就可以工作,但是每当出现错误情况时(例如用户选择不存在的数据库),Python会给我以下内容:
I am unable to connect to the database
None
Traceback (most recent call last):
File "./duplicate_finder.py", line 163, in <module>
main(sys.argv[1:])
File "./duplicate_finder.py", line 142, in main
print e.diag.message_detail
AttributeError: 'OperationalError' object has no attribute 'diag'
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的catch-all方法来捕获psql在连接失败时生成的任何错误消息,或者我是否需要编写除多个psycopg2异常的块之外的其他消息?
从我的脚本中提取:
import sys, getopt, os, time, csv, psycopg2
...
...
conn_string = "host=" + dbhost + " dbname=" + database + " user=" + dbuser + " password=" + dbpass
try:
conn = psycopg2.connect(conn_string)
except psycopg2.Error as e:
print "Unable to connect!"
print e.pgerror
print e.diag.message_detail
sys.exit(1)
else:
print "Connected!"
cur = conn.cursor()
cur.execute("SELECT id, lastname, firstname, location FROM test ORDER BY ctl_upd_dttm DESC;")
print cur.fetchone()
...
conn.close()
Run Code Online (Sandbox Code Playgroud)
sde*_*ian 24
当我尝试捕获异常时,对于连接错误,e.pgerror始终为None.以下代码块通过直接打印'e'来解决这个问题.
try:
conn = psycopg2.connect(conn_string)
except psycopg2.OperationalError as e:
print('Unable to connect!\n{0}').format(e)
sys.exit(1)
else:
print('Connected!')
# do stuff
Run Code Online (Sandbox Code Playgroud)
例如,在密码验证失败的情况下:
Unable to connect!
FATAL: password authentication failed for user "user"
Run Code Online (Sandbox Code Playgroud)
我意识到这个问题已经有一年了,但希望未来有可能帮到某个人
您正在使用基类捕获所有异常psycopg2.Error。您的问题可能是该diag属性在psycopg2 2.5. 你的版本是什么?
>>> print psycopg2.__version__
2.5.1 (dt dec pq3 ext)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28529 次 |
| 最近记录: |