On Tue, 2011-11-15 at 02:57 +0100, Vlad K. wrote:
> This has turned into a much bigger issue than I originally thought it would.
> 
> As suggested by Chris here and Michael on the SQLAlchemy list where I 
> asked first about refreshing sessions, this problem is solvable if you 
> reload any model you need after the rollback. But all this fails if I 
> deal with lists of model instances. I can't reload the list and go 
> through it again, over and over if any of the list elements causes a 
> rollback...
> 
> 
> 
> It seems to me this is a major bug wrt the Transaction package, unless 
> there is a solution which I'm currently oblivious to. So the review what 
> is going on:
> 
> * A subtransaction (created with transaction.savepoint()) fails, eg. 
> raises IntegrityError
> 
>      - Transaction emits rollback (manually invoking 
> savepoint.rollback() fails)
>      - If transaction.abort() is not called, the entire request then 
> fails with InvalidRequestError: This Session's transaction has been 
> rolled back due to a previous exception during flush

This is the first issue to investigate, I think.  Can you provide some
code that does something you want to do that has this/these outcome(s)?
I can ship it off to the z.sqla maintainer and see if it's expected
behavior or what.


>      - If transaction.abort() is called, the outer transaction (every 
> model loaded into session between BEGIN and SAVEPOINT) is invalidated 
> and requires manual reloading
>      - manual reloading is impossible if you're in the middle of a loop 
> through a list of loaded models
> 
> Please let me know if I'm being silly or dumb and not seeing something 
> too obvious, because I'm still learning both SQLAlchemy and how to 
> properly use the Transaction package, and dealing with IntegrityErrors 
> in the middle of a view without invalidating entire transaction is IMHO 
> not some borderline or arcane usage of transactions.
> 
> 
> 
> Currently my only choice is abandoning Transaction and writing my own 
> tween to properly commit or rollback the transaction in uncaught 
> exceptions -- basically rewrite pyramid_tm not to use Transaction. If I 
> can avoid that (and rewriting the app to use session directly instead of 
> transaction), it would be great!
> 
> 
> Many thanks!
> 
> .oO V Oo.
> 
> 
> On 11/14/2011 07:50 PM, Chris McDonough wrote:
> > I think the issue here is that (for better or worse), calling
> > transaction.commit() causes the session to be closed, which detaches the
> > objects obtained from that session.  The following iteration on your
> > script actually completes (note that I requery for "tm" after "second
> > pass")....
> 


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

Reply via email to