heh well thats the TG thing. I've never used it before or studied it, but I the impression I usually get when others talk about it is that their model of "autocommit" is a bit off.
On May 27, 2010, at 6:50 PM, Kent Bower wrote: > Thank you, as always. > > I failed to recognize I'm using the TurboGears foundation, which uses zope & > transaction: > > Is there a way to still accomplish this? > > >>> DBSession.begin_nested() > <sqlalchemy.orm.session.SessionTransaction object at 0xe9d5150> > >>> > >>> DBSession.commit() > Traceback (most recent call last): > File "<console>", line 1, in <module> > File > "/home/rarch/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.0.2-py2.6-linux-x86_64.egg/sqlalchemy/orm/scoping.py", > line 129, in do > return getattr(self.registry(), name)(*args, **kwargs) > File > "/home/rarch/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.0.2-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py", > line 655, in commit > self.transaction.commit() > File > "/home/rarch/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.0.2-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py", > line 368, in commit > self._prepare_impl() > File > "/home/rarch/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.0.2-py2.6-linux-x86_64.egg/sqlalchemy/orm/session.py", > line 344, in _prepare_impl > ext.before_commit(self.session) > File > "/home/rarch/tg2env/lib/python2.6/site-packages/zope.sqlalchemy-0.4-py2.6.egg/zope/sqlalchemy/datamanager.py", > line 201, in before_commit > assert zope_transaction.get().status == 'Committing', "Transaction must be > committed using the transaction manager" > AssertionError: Transaction must be committed using the transaction manager > >>> > > > On 5/27/2010 6:39 PM, Michael Bayer wrote: >> On May 27, 2010, at 5:12 PM, Kent wrote: >> >> >>> The docs state "For each begin_nested() call, a corresponding >>> rollback() or commit() must be issued." >>> >>> In PostgreSql, according to my understanding, if there is ever a >>> database exception, a rollback must be issued. >>> This means a main reason to issue a SAVEPOINT is as a hedge against an >>> error. >>> >>> As database transactions go, I want this entire thing to be a single >>> transaction, so now I don't know how to continue... >>> >>> For example, >>> >>> DBSession.begin_nested() #savepoint >>> DBSession.add(obj) >>> try: >>> DBSession.flush() >>> except IntegrityError: >>> DBSession.rollback() >>> else: >>> # now what? I do not want to commit, i have much >>> # more work to do than this which should be part of >>> # this transaction, but if I don't commit now, >>> # i need to issue 2 commits later()?? >>> >>> Is releasing the savepoint a choice instead of rolling() or commit()? >>> >> commit() releases the savepoint, if thats whats going on contextually. It >> doesnt actually commit the outer transaction if you've last called >> begin_nested(). >> >> your block should be like: >> >> session.begin_nested() >> try: >> ... >> session.flush() >> session.commit() >> except: >> session.rollback() >> >> >> > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.