Django:从IntegrityError中删除重复键异常

时间:2014-08-18 16:36:09

标签: python django django-models psycopg2

使用Django 1.6时,如果出现重复的密钥,我会收到异常

IntegrityError: duplicate key value violates unique constraint "..."

Django也对其他类型的数据库违规使用IntegrityError例外。我想将duplicate key作为一个特例来处理,即

try:
    model = MyModel(name='xyz')
    model.save()
except MyModal.IntegrityError:
    if exception_due_to_duplicate_key:
        do_something()
except:
    do_something_else()

是否存在唯一的错误代码,或者我是否必须解析错误消息。我试图避免get调用数据库以确定违规是由于重复密钥造成的。

更新:我应该提一下psycopg2抛出异常,因为我正在使用Django和PostgreSQL。

1 个答案:

答案 0 :(得分:6)

根据@karthikr的评论,我找到了错误类型:

type(e.__cause__)
<class 'psycopg2.IntegrityError'>

有点戳了一下这个:

e.__cause__.pgcode
'23505'

我的理解是,只要我坚持使用相同的数据库,我就可以检查这一点,以确认它是重复的密钥错误。

<击>&安培; psycopg2不会更改错误代码,