Flask + SQLAlchemy + WSGIでちょっとはまったメモ
えがおと開発中に、自分のアホさでハマったので自戒をこめてメモ
# いくつか同様のネタがあるのでシリーズ化するかも(´・ω・`)
結論を先に書くと、DB接続セッションはちゃんとクローズしろ(#゚Д゚)ゴルァ!! ってことなんですが
構成
原因と解決
Flaskの後処理プロセスの中でDBのセッションをクローズしていなかったのが原因みたいで、各アプリのafter_request(viewの後処理用プロセス)でdbのセッションをクローズするとOKだったみたい。
##### # close db session @app.after_request def close_session(response): # DBのセッションをクローズ db_session.close() return response
...というより、マニュアルに書いてあるんだからちゃんとヤレ(#゚Д゚)ゴルァ!!ってことですね、ほんとゴメンナサイ
詳しい原因については、WSGIでセッションが永続化されたせいで、他セッションの変更状態を取得できなかったのが原因?もしやdb_session.commit()ではホントの意味でコミットされない?等という妄想どまできちんと理解出来ていないので、近日中にWSGIとかSQLAlchemyまわりのコードとドキュメント読まなきゃだめだな…と思っております。
あと、他のフレームワークでdbのクローズ処理をサボってもOKだったからといって、全ての環境でサボっていいわけではないのよってことも反省…etc
以上です
マニュアルをちゃんと読めばこんなミスをしないと思いますが、同様の現象でハマった人の一助になればこれ幸い