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)