1. ホーム
  2. python

[解決済み] SQLAlchemyのセッションを閉じるには?

2023-06-02 12:05:43

質問

でコメントした内容に従って MySQLでsqlalchemyの接続を閉じる方法 SQLAlchemy がデータベースに作成する接続をチェックしているのですが、 Python を終了しないと接続を閉じることができないのですが、どうしたらいいですか?

このコードをPythonコンソールで実行すると、Pythonを終了するまでセッションを開いたままにしておきます。

from sqlalchemy.orm import sessionmaker
from models import OneTable, get_engine

engine = get_engine(database="mydb")
session = sessionmaker(bind=engine)()

results = session.query(OneTable.company_name).all()

# some work with the data #

session.close()

で、これを閉じるために見つけた唯一の回避策は engine.dispose() を最後に追加することです。

上にあげたリンクのコメント通り、今質問しているのは

  • なぜ engine.dispose() はセッションを閉じるために必要なのですか?
  • 必要ありません。 session.close() で十分なのでは?

どのように解決するのですか?

ここでは、"session" という単語をめぐる中心的な混乱があります。 ここではよく分かりませんが、どうやら SQLAlchemy セッション MySQL @@session で、これは MySQL に最初に接続したときと切断したときのスコープを参照します。

これら 2 つのコンセプトは は同じではありません。 . SQLAlchemy のセッションは一般的に 一つ以上のトランザクションの を表し、特定のデータベースへの接続の際の

したがって、文字通り質問された質問に対する答えは session.close() を呼び出すこと、つまり、 "SQLAlchemyのセッションを適切に閉じる方法"です。

しかし、質問の残りの部分は、あなたが、特定の Session が閉じられたときに、実際の DBAPI 接続も同様に閉じられるような、何らかの機能が必要であることを示しています。

これが意味するところは、基本的に 接続プーリング . これは、他の回答が言及しているように、十分に簡単です。 NullPoolを使用する .