0

webapp2、SQLalchemy、postgresql ベースの Web アプリケーションを作成しています。

私の質問は次のとおりです。

ドキュメントを読んで、これがセッションオブジェクトを作成して閉じるための最良の方法であることがわかりました。しかし、WebApp2 でそれを達成する方法はわかりません。誰かがそれを行うためのより良い効率的な方法を知っているなら、私に知らせてください。

現在、構成ファイルに scoped_session obj を作成しており、このファイルをインポートして必要な場所で obj を使用しています。オブジェクトをどこにも閉じていませんが、これは良い習慣ではないと思います。私が達成したいのは、ブラウザからのリクエストがあるたびに、新しいセッション オブジェクトを取得し、このセッション オブジェクトを使用してデータベースと対話し、応答が返されたらセッション オブジェクトを閉じることです。

ありがとう

4

1 に答える 1

0

dispatch() をオーバーライドする方法のようです。

class MyHandler(webapp2.RequestHandler):
    def dispatch(self):
        try:
            ret = webapp2.RequestHandler.dispatch(self)
            Session().commit()
            return ret
        except:
            Session().rollback()
            raise

これは、次のようなものがあると仮定しています。Session = scoped_session(sessionmaker())したがって、Session()常にスレッドローカル セッションを返します。

注: 私は webapp2 を知らないので、これが正確な場所かどうかはわかりません。たとえばdispatch、親クラスの呼び出しに例外ハンドラーがあるかどうかはわかりません。そのため、別の場所で同様の手法 (またはここでエラーを検出する別の方法) が必要になる場合があります。

于 2013-08-27T11:25:55.343 に答える