2

Flask アプリケーションに SQLAlchemy を使用していますが、MySQL DB へのクローズド接続でいくつかの問題に遭遇しました。

私は自分の接続をこのように設定しています__init__.py

engine = create_engine('mysql://user:pass@localhost/db', pool_recycle=3600)
db = SQLAlchemy(app)

(私はDBを照会するために両方の方法を使用しています)

pool_recycle 設定を追加したばかりですが、失われた接続を再開できるようにしたいと考えています。

次のセクションを読む: http://docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-pessimistic

このコードを実際に使用する方法がよくわかりません。コードで使用されるたびに接続を確認する必要はなく、接続が閉じた場合は接続を再起動する必要があります。DB の切断を処理する一般的なイベントを追加することは可能ですか?

4

2 に答える 2

1

ここでの問題は、アプリ自体が、接続を使用しようとしたときに接続がダウンしているかどうかしか認識しないことだと思います。Webサイトにログインしているようですが、更新後、セッションが終了しているため、再度ログインするように求められます。リフレッシュするまで-ログインしています。シュレディンガーの猫?

まったく同じ問題が発生しました。これまでのところ、pool_recycleを使用するのが最善の方法のようです。エラーが発生した場合は、恋人が時間をリサイクルするか、mySQLの構成を編集してください。

ドキュメントが示すように、定期的にチェックするか、エラーが発生する可能性があります(Javaの場合のように、クラスメソッド内のすべてを除いて、それらを使用してください)。または、接続が確立されていることを期待して、時々更新します。この場合、悲観的なアプローチでは、データベースを使用する前に定期的にチェックを実装します。これが最も安全な方法ですが、おっしゃるように、かなり汚い方法です。

Djangoとして実行するもう1つのオプションは、永続的な接続がないことです。確かにそれはかなり遅いですが、プロジェクトが小さければ-それは仕事をするはずです。それについて:http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.NullPool

于 2012-10-18T11:25:32.330 に答える