Python + SQLAlchemy 问题 : The transaction is inactive due to a rollback in a subtransaction

标签 python sqlalchemy pylons

我在使用 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/

相关文章:

python - 在 mysql/python 中转义整个字符串

python - 在Python中合并两个csv文件

python - 如何从 boto 中的 sns 取消订阅 sqs 队列

mysql - 与许多用户一起使用 Plone 4 和 pas.plugins.sqlalchemy

mysql - 我将如何在 SQL/SQLALCHEMY 中设计相互依赖的外键

python - 将 Pylons Controller 作为单独的应用程序运行?

python - 仅向经过身份验证的用户显示 pdf

python - 使用 tfx 运行多个训练器时 Kubeflow Pipeline RuntimeError

python - SQLAlchemy - 获取表的创建日期

c++ - 在不使用缓冲区的情况下对 2 个图像进行操作(加法、减法等)