#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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---