#10634: Confusing differential exceptions: get_or_create vs get with psycopg2
---------------------------------------------------+------------------------
 Reporter:  fergusferrier                          |       Owner:  nobody    
   Status:  new                                    |   Milestone:            
Component:  Database layer (models, ORM)           |     Version:  SVN       
 Keywords:  psycopg2 get_or_create get misleading  |       Stage:  Unreviewed
Has_patch:  0                                      |  
---------------------------------------------------+------------------------
 I'm using Psycopg2. I hope the models here are somewhat self-explanatory
 in structure.

 I made the simple mistake of forgetting the boolean 'created' in a
 get_or_create...

 {{{
    usr = EventsUser.objects.get_or_create(user = request.user)
 }}}

 Then running the following code [NB. usr is not an instance of EventsUser
 at this point]...

 {{{
 Reminder.objects.get_or_create(
     events_user = usr,
     event = event,
     assoctype = 'EML_HR'
 )
 }}}

 gives thus:

 {{{
 Traceback (most recent call last):
   File
 "/home/django/domains/staging.mypidge.com/project/Apps/Events/tests/views.py",
 line 418, in test_set_reminder_unset
     response = self.client.get(reverse('Events.views.SetReminders',
 args=[self.event.id]), {'day': '1', 'hour': '1'})
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/test/client.py", line 278, in get
     response = self.request(**r)
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/core/handlers/base.py", line 91, in get_response
     response = callback(request, *callback_args, **callback_kwargs)
   File
 "/home/django/domains/staging.mypidge.com/project/Apps/basic/funcs.py",
 line 35, in decorator
     return f(request, *args, **kwargs)
   File
 "/home/django/domains/staging.mypidge.com/project/Apps/Events/views.py",
 line 319, in SetReminders
     assoctype = 'EML_HR'
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/manager.py", line 120, in get_or_create
     return self.get_query_set().get_or_create(**kwargs)
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/query.py", line 365, in get_or_create
     return self.get(**kwargs), False
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/query.py", line 337, in get
     num = len(clone)
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/query.py", line 161, in __len__
     self._result_cache = list(self.iterator())
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/query.py", line 281, in iterator
     for row in self.query.results_iter():
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/sql/query.py", line 256, in results_iter
     for rows in self.execute_sql(MULTI):
   File "/home/django/domains/mypidge.com/env/lib/python2.5/site-
 packages/django/db/models/sql/query.py", line 2098, in execute_sql
     cursor.execute(sql, params)
   File "build/bdist.linux-x86_64/egg/psycopg2/extensions.py", line 96, in
 getquoted
     pobjs = [adapt(o) for o in self._seq]
 ProgrammingError: can't adapt
 }}}

 When one replaces the second get_or_create with a plain get, you are
 returned
 {{{
     ValueError: Cannot assign "(<EventsUser: EventsUser object>, False)":
 "Reminder.events_user" must be a "EventsUser" instance.
 }}}

 which is a much more useful exception. I would expect get_or_create to
 return a similar.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/10634>
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to