这是我第一个广泛使用psycopg2的项目.我试图找到一种方法,在连接try 失败时提取psql错误消息.我已经测试过,如果所有变量都设置正确,下面的代码将正常工作,但是每当出现错误情况时(例如,用户 Select 一个不存在的数据库),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异常编写除块之外的代码?

摘self 的 playbook :

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

推荐答案

您正在捕获基类psycopg2.Error的所有异常.您的问题可能是diag属性在psycopg2 2.5中是新的.你的版本是什么?

>>> print psycopg2.__version__
2.5.1 (dt dec pq3 ext)

Postgresql相关问答推荐

即使密码更改,也可以访问Docker Postgresql数据库

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

PostgreSQL plpgsql函数问题

postgres 不同类型的更新

如何重新格式化已获取的 psql 查询输出?

表示 SQL 表的 Go struct

如何在 sequelize 使用 db postgres 中通过外键更新记录和更新包含许多记录关系

是否可以短时间运行 VACUUM FULL 并获得一些好处?

连接 Supbase Postgresql 数据库时,Stepzen Graphiql 资源管理器中的主机名解析错误

postgres 和 python

如何从元组列表中 Select 与多列匹配的行?

PostgreSQL 中的 JSON 外键

从 PostgreSQL 中的字段中提取数字

获取 PostgreSQL 中当前正在运行的查询的参数

将主键更改为自动递增

Rails ActiveRecord - 如何获取两个日期之间的记录

PostgreSQL:将结果数据从 SQL 查询导出到 Excel/CSV

PostgreSQL 获取过go 12 小时的元素

如何在 postgres 查询中排名

PostgreSQL 9.1:如何连接数组中的行而不重复,加入另一个表