def transaction(func): @functools.wraps(func) def _wrapper(*args, **kwargs): db.session.begin(subtransactions=True,nested=True) try: ret = func(*args, **kwargs) db.session.commit() return ret except Exception,e: db.session.rollback() log.trace() log.debug(e.message) raise e return _wrapper
def setup_transaction(func): def _wrapper(self,*args,**kwargs): db.session.begin(subtransactions=True,nested=True) try: ret = func(self,*args, **kwargs) db.session.commit() return ret except Exception,e: db.session.rollback() log.trace() log.debug(e.message) raise e return functools.update_wrapper(_wrapper, func)--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
session = session_factory()demo = Demo(name='banxi')try: with session.begin(subtransactions=True): session.add(demo) session.add(Demo(name='iyan')) raise Exception('test for exception')except Exception,e: #session.rollback() print e.message
print session.query(Demo).all() File "/home/banxi/Envs/learn-sqlalchemy/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 282, in _connection_for_bind self._assert_active() File "/home/banxi/Envs/learn-sqlalchemy/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 198, in _assert_active "This Session's transaction has been rolled back "sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back by a nested rollback() call. To begin a new transaction, issue Session.rollback() first.尝试用 decorator 库吧 ( https://pypi.python.org/pypi/decorator),它解决了写 decorator 过程可能遇到的问题
嗯,我指的是需要我再手动执行一次rollback, 才OK的。所以我就不明白了。字面意思是一个嵌套的transaction 已经回滚了。需要再执行一次Session. rollback 来开始一个新的事务。来执行查询,有的不明白。
PS:你不算大神,谁算。
嗯,我指的是需要我再手动执行一次rollback, 才OK的。所以我就不明白了。字面意思是一个嵌套的transaction 已经回滚了。需要再执行一次Session. rollback 来开始一个新的事务。来执行查询,有的不明白。
PS:你不算大神,谁算。
--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
def __init__(self, bind=None, autoflush=True, expire_on_commit=True, _enable_transaction_accounting=True, autocommit=False, twophase=False, weak_identity_map=True, binds=None, extension=None, query_cls=query.Query): if not self.autocommit: self.begin() File "/home/banxi/work/python/learn-sqlalchemy/session_base_tutorial.py", line 26, in test_session_with_syn with session.begin(): File "/home/banxi/Envs/learn-sqlalchemy/local/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 648, in begin "A transaction is already begun. Use "InvalidRequestError: A transaction is already begun. Use subtransactions=True to allow subtransactions.SA也可以用with语法。应该不负责,可能是我比较笨,理解有偏差。
--
--
邮件来自: `CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: pyth...@googlegroups.com
详情: http://code.google.com/p/cpyug/wiki/CpyUg
G+: https://plus.google.com/u/0/communities/108786798869709602787
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
---
您收到此邮件是因为您订阅了 Google 网上论坛的“python-cn(华蟒用户组,CPyUG 邮件列表)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 python-cn+...@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。