从SQLAlchemy + Postgres中的IntegrityError中获取约束名称

Nic*_*ack 5 python postgresql error-handling unique-constraint

某些类型的约束最好由数据库检查,因为尝试手动检查它们可能会导致竞争条件.那么,您认为数据库驱动程序会让这很容易,对吧?

golang的数据库驱动程序pq解析了整个错误,包括约束的名称.知道约束的名称可以很容易地将其映射到出错的地方.

是否有一个Python的postgres驱动程序,为您提供约束名称,而不需要您自己解析它?

Nic*_*ack 11

哦,我找到了.它在这里:

try:
    db.session.commit()
except sqlalchemy.exc.IntegrityError, e:
    constraint = e.orig.diag.constraint_name
Run Code Online (Sandbox Code Playgroud)

实际上,diag对象中有很多有用的东西:

>>> dir(e.orig.diag)[15:]
['column_name', 'constraint_name', 'context', 'datatype_name', 'internal_position', 'internal_query', 'message_detail', 'message_hint', 'message_primary', 'schema_name', 'severity', 'source_file', 'source_function', 'source_line', 'sqlstate', 'statement_position', 'table_name']
Run Code Online (Sandbox Code Playgroud)