On Tue, Jul 7, 2009 at 1:39 PM, Steve Howell <showel...@yahoo.com> wrote:

>
> Hi everybody, I posted the following about a week ago and did not get
> a response.
>
> I'm hoping it was simply lost in the shuffle the first time, so maybe
> it will get an answer now.
>

Yeah, a lot of people (including me) seem to be pretty busy these days and
not having a whole lot of spare time for answering questions.


>
> If my questions didn't get a response due to some missing information
> in my original post, maybe I can provide it now.
>

Please see below.


>
> On Jun 29, 10:53 am, Steve Howell <showel...@yahoo.com> wrote:
> > Hi, I have created a management command that populates some tables in
> > a Postgres database, and I use the handy get_or_create() method in db/
> > models/query.py.  I tried running a command recently where I had
> > inadvertently left some foreign key references dangling around,
>

Could you be a little more specific about what the error was in your code?
>From looking at the full get_or_create routine you include below it isn't
immediately obvious to me where it might be raising an IntegrityError before
the savepoint is created, yet it sounds like that is what is happening.  We
need to understand how that is happening before figuring out what the right
fix is.

Karen


> but
> > instead of a useful error, I instead got the obscure error "no such
> > savepoint."  The code catches the original exception that would have
> > helped me realize my own error, and instead raises a new exception
> > about "no such savepoint."
> >
> > Here is the code with get_or_create() that obscures the error:
> >
> >             except IntegrityError, e:
> >                 transaction.savepoint_rollback(sid)
> >
> > In order to see actual errors, I think I need to something with
> > management commands that allows the savepoint to be rolled back.  Has
> > anybody encountered this before?  I've skimmed some long threads
> > pertaining to Django/psycopg/Postgres interactions with respect to
> > setting up transaction management, but I have to admit that most of
> > the discussion has been over my head.
> >
> > Thanks,
> >
> > Steve
> >
> > P.S.  Here is the entire method for get_or_create(), for more context:
> >
> >     def get_or_create(self, **kwargs):
> >         """
> >         Looks up an object with the given kwargs, creating one if
> > necessary.
> >         Returns a tuple of (object, created), where created is a
> > boolean
> >         specifying whether an object was created.
> >         """
> >         assert kwargs, \
> >                 'get_or_create() must be passed at least one keyword
> > argument'
> >         defaults = kwargs.pop('defaults', {})
> >         try:
> >             return self.get(**kwargs), False
> >         except self.model.DoesNotExist:
> >             try:
> >                 params = dict([(k, v) for k, v in kwargs.items() if
> > '__' not in k])
> >                 params.update(defaults)
> >                 obj = self.model(**params)
> >                 sid = transaction.savepoint()
> >                 obj.save(force_insert=True)
> >                 transaction.savepoint_commit(sid)
> >                 return obj, True
> >             except IntegrityError, e:
> >                 transaction.savepoint_rollback(sid)
> >                 try:
> >                     return self.get(**kwargs), False
> >                 except self.model.DoesNotExist:
> >                     raise e
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to