Django:从IntegrityError中推断重复键异常

12 投票
1 回答
13865 浏览
提问于 2025-04-18 17:40

在使用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 个回答

10

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

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

稍微查了一下,发现了这个:

e.__cause__.pgcode
'23505'

我的理解是,只要我使用同一个数据库,就可以检查这个来确认它是一个重复键的错误。

& psycopg2 不会改变错误代码,

撰写回答