如何捕获错误1062“重复条目”独立于使用的数据库/引擎?

前端之家收集整理的这篇文章主要介绍了如何捕获错误1062“重复条目”独立于使用的数据库/引擎?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在一个项目中,我开始使用 MySQL作为数据库.而不是先检查,我只是做一个插入,如果我得到代码1062的IntegrityError异常,我知道有一个重复的条目并警告用户,这样做.

看起来基本上是这样的:

try:
    # add duplicate,nothing bad happens yet,is only in sqla session
    db.session.add(User(email='already_used_email@address_that_has_to_be_unique.com'))
    # commit,now the IntegrityError is raised,when sqla inserts
    db.session.commit()
except IntegrityError as e:
    db.session.rollback()
    # this is what i do with MysqL,check the exception for code 1062
    # how can i replace this with something db independent?
    code,msg = e.orig
    if code == 1062:
        # send warning
        pass

现在,对于一个,这使得已经无法用例如测试.内存中的sqlite.不好,但我可以忍受.

然而,第二,我可能(必须/希望其他超出此问题的范围)切换到Postgres.当然我可以更改代码(也)检查Postgres错误代码,但我希望有一种方法sqlALchemy告诉我,重复发生独立于数据库.数据库方言抽象……?

解决方法

您要搜索内容称为“sqlSTATE” – 一组标准错误代码,涵盖了大多数常见的RDBMS错误状态.但它们并不一定能为所有目的提供足够的细节,我不知道sqlite是否支持它们.

> http://www.postgresql.org/docs/9.1/static/errcodes-appendix.html
> http://dev.mysql.com/doc/refman/5.0/en/error-handling.html

猜你在找的MsSQL相关文章