python - SQLAlchemy+ Tornado : can't reconnect until invalid transaction is rolled back

标签 python mysql web-applications sqlalchemy tornado

我正在用 tornado+sqlalchemy 构建一个 webapp 并且绝对随机我得到了这个错误

     File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception
    exc_info
  File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 187, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=exc_value)
  File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 182, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 822, in _execute_context
    conn = self._revalidate_connection()
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 239, in _revalidate_connection
    "Can't reconnect until invalid "
sqlalchemy.exc.StatementError: Can't reconnect until invalid transaction is rolled back

我不知道如何解决这个问题。我已将所有 db.commit 放入一个

try:
  self.db.commit()
except Exception(e):
  self.db.rollback()

那是我的类(class)申请。

class Application
        [...]
        engine = create_engine(options.db_path, convert_unicode=True, echo=options.debug)
        models.init_db(engine)
        self.db = scoped_session(sessionmaker(bind=engine))
        tornado.web.Application.__init__(self, handlers, **settings)

但什么也没有。 为 mysql+php 等 Web 应用配置 sqlalchemy 和 tornado 的最佳方法是什么?

最佳答案

我的方法是在完成时回滚,将其添加到您的 BaseHandler 中:

def on_finish(self):
    if self.get_status() == 500:
        self.db_session.rollback()

关于python - SQLAlchemy+ Tornado : can't reconnect until invalid transaction is rolled back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190991/

相关文章:

java - 本地主机 MySQL 数据库和 Java .jar 创建

javascript - 检查 mousemove 是否是确定是否下载 Assets 的好方法?

python - 使用 GOOGLE Analytics API - 指标/维度

python - swig 生成 python 文件加 C#

mysql - 从 vb.net 数据读取器中的多个表读取

mysql - 通过 localhost 连接 MySQL 不工作但 127.0.0.1 工作

python - urllib - 从 Python2 更新到 Python3

python - 复杂 SQL 优化与通用语言

javascript - 如何将我所有的 live() 函数替换为 on() 函数

javascript - Firebase 消息传递服务可以作为 websockets/服务器发送事件的可扩展替代品吗?