2017-08-02 10 views
3

私はFlask tutorialを勉強しており、データベースに接続するためのアプリコンテキストの使い方について混乱しています。このページでは、Flaskチュートリアル:DB接続にアプリコンテキストを使用するのはなぜですか?

いつもデータベース接続を作成して終了することは非常に効率が悪いので、それはずっと長く保管しておく必要があります。 データベース接続はトランザクションをカプセル化するため、 は、一度に1つの要求だけが接続を使用するようにする必要があります。

しかし、接続の作成と終了は、コードによって達成されるものと正確に同じです。データベースに接続し、接続オブジェクトを返し、存在しない場合はアプリケーションコンテキストに追加するビューget_dbがあります。また、アプリケーションコンテキストが解体されたときに接続オブジェクトを閉じるようなビューもあります(close_db)。

私は、ここで何が起こっているのかを以下のように理解しています。ユーザは、アプリケーションのホームページに接続し、データベースとの接続を確立して閉じます。ユーザがページにリクエストを行うたびに(例えば、新しいブログエントリを投稿する)、データベースとの新しい接続が確立され、リクエストが完了すると閉じられる。それでは、アプリコンテキストを使用する価値は何ですか?なぜ、リクエストごとに接続を直接作成したり閉じたりしないのですか?

多分私はここで何かを誤解しています - どんな洞察にも感謝します!

答えて

3

これはひどく記述されています。しかし基本的にアプリケーションコンテキストの要点は、要求に応じたアプリケーション固有のデータオブジェクトを抽象化することです(コンテキストを要求するためにすべてを束ねることなくFlaskのすべての個別インスタンスであるマルチテナントアプリケーションを許可するために表面上)。どちらの場合でも、flask.gは現在のアプリコンテキストのアプリコンテキスト固有のものです。あなたは、非常に最初のリクエストに応じてget_db()を呼び出すgに結果の接続オブジェクトを突き出すし、各要求に殺されていないアプリ、の後のg.dbconnを使用することができます。この方法は、(おそらくあなたは、各ページに同じ接続を使用したいですアクセス)。私はflask.gが(この場合はアプリケーションである)クラスのようなものだと思うのは、globals()のインスタンスです。

も参照してください。http://flask.pocoo.org/docs/0.12/appcontext/#app-context

関連する問題