From a quick reading of the 'transaction' package source, it looks like
you should be able to create savepoints and roll them back something
like this:

savepoint = transaction.savepoint()
try:
    # ...
except:
    savepoint.rollback()
    raise


Thanks for the interest in helping. I had already gone down that road and abandoned it when I realized it wasn't playing nicely with sqlalchemy session:

>>> a=TranCode()
>>> a.transactioncodeid='PMT'
>>> sp=transaction.savepoint()
>>> DBSession.add(a)
>>> DBSession.flush()
15:53:52,852 INFO [sqlalchemy.engine.base.Engine.0x...88d0] SAVEPOINT sa_savepoint_1
15:53:52,853 INFO  [sqlalchemy.engine.base.Engine.0x...88d0] {}
/home/rarch/tg2env/lib/python2.6/site-packages/SQLAlchemy-0.6.0.2-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py:500: SAWarning: Unicode type received non-unicode bind param value 'PMT'
  param[key.encode(encoding)] = processors[key](compiled_params[key])
15:53:52,855 INFO [sqlalchemy.engine.base.Engine.0x...88d0] INSERT INTO trancodes (transactioncodeid, description, debitorcredit, posttogl, userdefined, codetype) VALUES (:transactioncodeid, :description, :debitorcredit, :posttogl, :userdefined, :codetype) 15:53:52,855 INFO [sqlalchemy.engine.base.Engine.0x...88d0] {'description': None, 'userdefined': None, 'transactioncodeid': 'PMT', 'codetype': None, 'debitorcredit': None, 'posttogl': None}
after flush!!
>>> sp.rollback()
15:53:52,859 INFO [sqlalchemy.engine.base.Engine.0x...88d0] ROLLBACK TO SAVEPOINT sa_savepoint_1
15:53:52,860 INFO  [sqlalchemy.engine.base.Engine.0x...88d0] {}
Traceback (most recent call last):
  File "<console>", line 1, in <module>
File "/home/rarch/tg2env/lib/python2.6/site-packages/transaction-1.0a1-py2.6.egg/transaction/_transaction.py", line 662, in rollback
    transaction._saveAndRaiseCommitishError() # reraises!
File "/home/rarch/tg2env/lib/python2.6/site-packages/transaction-1.0a1-py2.6.egg/transaction/_transaction.py", line 659, in rollback
    savepoint.rollback()
File "/home/rarch/tg2env/lib/python2.6/site-packages/zope.sqlalchemy-0.4-py2.6.egg/zope/sqlalchemy/datamanager.py", line 147, in rollback self.session.clear() # remove when Session.rollback does an attribute_manager.rollback
AttributeError: 'Session' object has no attribute 'clear'
>>>

Apparently I need to look into whether zope has a SQLA 0.6.0 compatible release 
yet...looks to be trying to call session.clear


--
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.

Reply via email to