SQLAlchemy错误处理 - 它是如何完成的?

Hub*_*bro 18 sqlalchemy exception

我想处理一个主键或唯一键冲突的情况,即一个重复的条目.为此,我抓住了IntegrityError,这很好地捕获了错误.问题是,我似乎无法找到任何简单的错误消息或错误代码来检查.我得到的只是IntegrityError.message属性,它是一个如下所示的字符串:

(IntegrityError)(1062,"重复输入'foobar'用于键'name'")

这不是很有帮助.使用它我将不得不开始解析他们的代码和消息的错误消息.调用dir异常仅显示以下属性:

'args','connection_invalidated','instance','message','orig','params','statement'

args只是一个单项元组,里面有上面提到的字符串,而params是我试图插入的数据.我似乎无法找到任何方法来确定这实际上是一个重复的键错误,而不必实际使用正则表达式或其他东西开始解析错误消息.

任何人都可以对这个问题有所了解吗?

谢谢

Hub*_*bro 27

我在通过更仔细地阅读文档来编写问题时想到了这一点.我仍然会发布这个,因为它可能对某人有所帮助.

在SQLAlchemy DBAPIError的文档中,IntegrityError是子类的子类,它解释了该异常仅仅是底层数据库API错误的包装器,并且原始错误orig在异常中保存.果然,打电话给e.orig.args我得到一个组织得很好的元组:

(1062,"重复输入'foobar'用于键'name'")

  • 对于使用 psycopg2 的人:您可以使用 `e.orig.pgcode` 并将其与 [`psycopg2.errorcodes`](http://initd.org/psycopg/docs/errorcodes.html#module-psycopg2.errorcodes) 映射到获取类似于“e.orig.pgcode == FOREIGN_KEY_VIOLATION”的可读代码。 (2认同)