(sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back

来源:互联网 发布:女包包网淘宝网 编辑:程序博客网 时间:2024/05/20 05:53
在mysql超过wait_timeout后,连接会挂掉,服务就会报错 OperationalError: (_mysql_exceptions.OperationalError) (2006, 'MySQL server has gone away') ,由于也sqlalchemy关闭了autocommit,隐式使用了事务,还会有错误StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back

项目使用web框架,使用sqlalchemy作为orm框架.

错误a:

OperationalError: (_mysql_exceptions.OperationalError) (2006, 'MySQL server has gone away')

错误b:

StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back

 

错误a是因为mysql的连接到达了wait_timeout, 使用超时的连接就会报错gone away, 

错误b是因为连接断开后,事务没有回滚,残留的锁导致后续的查询报错.

 

解决方案一:打开autocommit

sqlalchemy打开autocommit后, 就会停止使用事务,生成的查询语句立即执行, 防止了错误b. 

 

解决方案二:

在所有访问数据库的地方加异常捕获,报异常时rollback

阅读全文
0 0
原创粉丝点击