[解決済み] MySQLでsqlalchemyの接続を閉じる方法
質問
実行したいサンプルコードです。
for i in range(1,2000):
db = create_engine('mysql://root@localhost/test_database')
conn = db.connect()
#some simple data operations
conn.close()
db.dispose()
MySQL から "Too many connections" エラーを受けることなくこれを実行する方法はありますか? 私はすでに、それ以外の接続を処理するか、接続プールを持つことができることを知っています。私はただ、sqlalchemyから接続を適切に閉じる方法を理解したいのです。 事前にありがとうございます!
どのように解決するのですか?
そのコードを正しく書く方法を説明します。
db = create_engine('mysql://root@localhost/test_database')
for i in range(1,2000):
conn = db.connect()
#some simple data operations
conn.close()
db.dispose()
つまり
Engine
は
ファクトリー
と同様、接続のための
プール
を使用します。 というときは
conn.close()
と言う場合、その接続は
エンジン内の接続プールに戻されます。
であり、実際には閉じられていない。
接続を実際に閉じたい場合、つまり、プールされないようにしたい場合は
NullPool
:
from sqlalchemy.pool import NullPool
db = create_engine('mysql://root@localhost/test_database', poolclass=NullPool)
上記の
Engine
の構成では、各呼び出しは
conn.close()
を呼び出すたびに、基礎となる DBAPI 接続が閉じられます。
もしあなたが実際に
異なる
データベースに接続したい場合、つまり、ハードコードされた
"localhost/test_database"
は単なる例であり、実際にはたくさんの異なるデータベースがある場合
dispose()
を使用するアプローチは問題ありません。プールからチェックアウトされていないすべての接続をクローズします。
上記のすべてのケースにおいて、重要なのは
Connection
オブジェクトを閉じるのに
close()
. もし、何らかのコネクションレス型の実行を行なっているのであれば、それは
engine.execute()
または
statement.execute()
というように
ResultProxy
オブジェクトを完全に読み込むか、あるいは、明示的に閉じる必要があります。
close()
. A
Connection
または
ResultProxy
がまだ開いている場合は
NullPool
または
dispose()
は、最後の接続をすべて閉じることからアプローチします。
関連
-
MySQLデータベース・インデックスの左端一致の原則
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] SQLAlchemy ORDER BY DESCENDING?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
MySQLによる既存テーブルのパーティショニングの実装
-
MySQLで正規表現を使う 詳細
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み】文字列からuniqueidentifierに変換する際に変換に失敗する - 2つのGUIDの場合
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
-
Mysqlの使用中に発生したエラーの一部
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] SQLAlchemyのセッションを閉じるには?