“Can't reconnect until invalid transaction is rolled back”这句话的意思是:在无效事务回滚之前,无法重新连接。

错误原因

错误是sqlalchemy抛出的。原因是你从pool拿的connection没有以session.commit或者session.rollback或者session.close的某一种放回pool里。这时connection的transaction没有完结(rollback or commit)。

而不知什么原因(recyle了,timeout了)你的connection又死掉了,你的sqlalchemy尝试重新连接。由于transaction还没完结,无法重连。

解决方案

正确用法是确保每个web请求完了session.close或者session.rollback。把链接还回pool。

其它解法

这通常是在数据库操作中出现的错误提示。当一个事务出现问题(例如违反了数据库的约束或规则),并且没有被正确回滚时,后续的连接尝试可能会被阻止,直到该无效事务被回滚以恢复数据库的一致性。

要解决这个问题,你需要找到并回滚导致错误的事务。这可能需要检查数据库的日志或使用相关的数据库管理工具来确定具体的问题事务,并采取适当的措施来解决它。

参考

"Can't reconnect until invalid transaction is rolled back" after application sits idle overnight