python - 从 psycopg2 异常中获取错误消息

标签 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'

是否有一种简单的、包罗万象的方法来捕获连接失败时 psql 生成的任何错误消息,或者我是否需要为多个 psycopg2 异常编写 except block ?

从我的脚本中提取:

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()

最佳答案

当我 try catch 异常时,对于连接错误,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

例如密码验证失败的情况:

Unable to connect!
FATAL:  password authentication failed for user "user"

我意识到这个问题已有一年之久,但希望将来能对某人有所帮助

关于python - 从 psycopg2 异常中获取错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332005/

相关文章:

python - 如何使用具有正确字符编码的 python 读取 SQL 文件?

python - 使用没有 SQLAlchemy 的 psycopg2 将 Pandas 数据框转换为 PostgreSQL 表?

python - 在 Python 中使用 map() 有条件地迭代不相等的列表

python - Numpy:如何用一维数组索引二维数组?

django - 如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为

Postgresql PITR 备份 : best practices to handle multiple databases?

python - 寻根函数中不一致的参数错误

python - memcached 可以有效处理多大的数据?

java - 我可以将 Realm 用作 postgres ORM 吗?

python - PostgreSQL 架构 "www"不存在?