1

WebApp2、SQLAlchemy、Apache、PostgrSQL などを使用して Web アプリケーションを作成していconfigます。データベース資格情報を格納するファイルがあり、scoped_session を使用してセッション オブジェクトを作成します。現在、すべてのビュー ファイルはこの構成ファイルをインポートし、次のようにセッション オブジェクトを使用します。

some_view.py
import config

def view():
   query = config.session.query(bla bla)

このアプローチは最終的なものではなく、可能な限り最良の方法を使用したいと考えています。

ここで達成したいのは、ビュー関数の実行後にセッション オブジェクトが閉じられるように、デコレータまたは webapp2関連の組み込みメソッドを使用してセッション オブジェクトを取得する方法です。私は多くの方法を試しましたが、達成できませんでした。実用的なスニペットは高く評価されます。

誰かがより良いアプローチを持っている場合は、提案してください。

ありがとう

編集 - - -

@javex: 提案ありがとうございます。呼び出し時に scoped_session オブジェクトを返し、作業が完了するとセッションを閉じるデコレータ クラスを探しています。参考までにサンプル コードを示しますが、動作しません。

class GetDBSession(object):
    """Decorator class to create DB session object"""
    def __init__(self):
        self.session = scoped_session(sessionmaker(bind=database_engine))

    def __exit__(self): #Dont know if it works
        self.session.close()

    def __call__(self): #Dont know if it works
        return self.session

そして、私はそれを次のように使いたいです:

@GetDBSession()
def view_func():
    #work with session object here
4

1 に答える 1