作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 Python + SQLAlchemy 时遇到问题。
当出现问题时(在我的例子中,由于竞争条件,这是一个完整性错误)并且引发数据库错误,所有以下请求都会导致引发错误:
InvalidRequestError: The transaction is inactive due to a rollback in a subtransaction. Issue rollback() to cancel the transaction.
虽然我可以防止这个原始错误(竞争条件)的发生,但我想要一个更强大的解决方案,我想防止单个错误导致整个应用程序崩溃。
执行此操作的最佳方法是什么?有没有办法告诉Python回滚失败的事务?
最佳答案
最简单的事情是确保当您开始在 Controller 中工作时使用新的 SQLAlchemy session 。在/project/lib/base.py中,为BaseController添加一个方法:
def __before__(self):
model.Session.close()
Session.close() 将清除 session 并关闭任何打开的事务(如果有)。您需要确保每次使用 session 时,当您完成 Controller 中的工作时, session 都会被清除。在 Controller 处理请求开始时执行此操作将确保它始终被清除,即使线程的先前请求出现异常并且有回滚等待。
关于Python + SQLAlchemy 问题 : The transaction is inactive due to a rollback in a subtransaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139211/
我是一名优秀的程序员,十分优秀!