2

MySQLdb標準ドライバーでは、通常、withステートメントを使用して、接続が で閉じられていることを確認することを理解しています__exit__

withSQLAlchemysessionsまたは多分に必要な同等のステートメントはありengineますか? または、接続を閉じるための手動タイムアウトは SQLAlchemy に十分ですか?

4

2 に答える 2

1

ドキュメントからの引用は次のとおりです。

ほとんどの Web フレームワークには、リクエストに関連付けられた単一のセッションを確立するためのインフラストラクチャが含まれています。このセッションは正しく構築され、リクエストの最後に対応する解体されます。このようなインフラストラクチャには、Flask Web フレームワークと組み合わせて使用​​する Flask-SQLAlchemy や、Pyramid および Zope フレームワークと組み合わせて使用​​する Zope-SQLAlchemy などの製品が含まれます。SQLAlchemy は、これらの製品を利用可能なものとして使用することを強くお勧めします。

統合ライブラリが利用できない状況では、SQLAlchemy には scoped_session と呼ばれる独自の「ヘルパー」クラスが含まれています。

したがって、scoped_sessionはあなたが話していることのようです。スコープ セッションの使用方法に関するドキュメントは非常に優れています。基本的に、いつセッションを開き、いつ閉じるかを定義します (カスタム作成スコープの使用 を参照)。

from my_web_framework import get_current_request, on_request_end
from sqlalchemy.orm import scoped_session, sessionmaker

Session = scoped_session(sessionmaker(bind=some_engine), scopefunc=get_current_request)

@on_request_end
def remove_session(req):
    Session.remove()

それが役立つことを願っています。

于 2013-06-13T18:04:48.523 に答える
1

あなたが探しているフレーズは「コンテキストマネージャーwith」です。これは、ステートメントで使用する必要がある属性命名規則に準拠するオブジェクトです。エンジン接続用のコンテキスト マネージャーの操作については、ドキュメントの「エンジンの操作」を参照してください。

with engine.begin() as connection:
    r1 = connection.execute(table1.select())
    connection.execute(table1.insert(), col1=7, col2='this is some data')

私が知る限り、Session オブジェクト自体にはそのような機能はありません。

于 2013-06-13T18:19:22.277 に答える