#12144: Django throwing ProgrammingError instead of IntegrityError for Duplicate Key with Postgres ---------------------------+------------------------------------------------ Reporter: tghw | Owner: nobody Status: new | Milestone: Component: Uncategorized | Version: 1.1 Keywords: | Stage: Unreviewed Has_patch: 0 | ---------------------------+------------------------------------------------ Using Django 1.1 with pyscopg2. I am using the email-confirmation app ([http://github.com/jtauber/django-email-confirmation/]) to make sure changes to email addresses are to the right account. In that app is the following code:
{{{ class EmailAddressManager(models.Manager): ... def add_email(self, user, email): try: email_address = self.create(user=user, email=email) EmailConfirmation.objects.send_confirmation(email_address) return email_address except IntegrityError: return None ... class EmailAddress(models.Model): ... class Meta: ... unique_together = ( ("user", "email"), ) }}} When add_email() is called with a user/email combination that already exists in the database, a ProgrammingError is thrown for the duplicate key instead of raising an IntegrityError, as should be the case: {{{ File "c:\python26\lib\site- packages\django_email_confirmation-0.1.3-py2.6.egg\emailconfirmation\models.py" in add_email 23. email_address = self.create(user=user, email=email) File "c:\python26\lib\site-packages\django\db\models\manager.py" in create 126. return self.get_query_set().create(**kwargs) File "c:\python26\lib\site-packages\django\db\models\query.py" in create 315. obj.save(force_insert=True) File "c:\python26\lib\site-packages\django\db\models\base.py" in save 410. self.save_base(force_insert=force_insert, force_update=force_update) File "c:\python26\lib\site-packages\django\db\models\base.py" in save_base 495. result = manager._insert(values, return_id=update_pk) File "c:\python26\lib\site-packages\django\db\models\manager.py" in _insert 177. return insert_query(self.model, values, **kwargs) File "c:\python26\lib\site-packages\django\db\models\query.py" in insert_query 1087. return query.execute_sql(return_id) File "c:\python26\lib\site-packages\django\db\models\sql\subqueries.py" in execute_sql 320. cursor = super(InsertQuery, self).execute_sql(None) File "c:\python26\lib\site-packages\django\db\models\sql\query.py" in execute_sql 2369. cursor.execute(sql, params) File "c:\python26\lib\site-packages\django\db\backends\util.py" in execute 19. return self.cursor.execute(sql, params) Exception Type: ProgrammingError at /profile/ Exception Value: duplicate key value violates unique constraint "emailconfirmation_emailaddress_user_id_key" }}} It looks to me like that app is doing the right thing, but Django is throwing the wrong error. -- Ticket URL: <http://code.djangoproject.com/ticket/12144> Django <http://code.djangoproject.com/> The Web framework for perfectionists with deadlines. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-updates?hl=en -~----------~----~----~----~------~----~------~--~---