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

1147 ワード

mysqlでwaitを超えるtimeout後、接続が切れると、サービスはOperationalError:(_mysql_exceptions.OperationalError)(2006,'Myserver SQL has gone away')と間違えて報告されます.sqlalchemyもautocommitを閉じ、トランザクションを暗黙的に使用したため、エラーStatementError:(sqlalchemy.exc.InvalidRequestError)Can't reconnect until invalid transaction is lerold 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は、接続が切断すると、トランザクションがロールバックされず、残りのロックにより後続のクエリがエラーを報告するためである.
 
ソリューション1:autocommitを開く
sqlalchemyがautocommitを開くと、トランザクションの使用が停止し、生成されたクエリー文が直ちに実行する、エラーbが防止される.
 
ソリューション2:
すべてのデータベースにアクセスする場所に例外キャプチャを追加し、例外を報告する場合rollback