9

私の Flask アプリケーションでは、pymongo を直接使用したいと考えています。しかし、リクエストごとにpymongo接続を作成する最良の方法と、接続リソースを再利用する方法がわかりません。

pymongo の Connection はスレッドセーフであり、プーリングが組み込まれていることは知っています。グローバルな Connection インスタンスを作成し、before_request を使用してフラスコ g に入れる必要があると思います。

app.py で:

from pymongo import Connection
from admin.views import admin
connection = Connection()
db = connection['test']

@app.before_request
def before_request():
    g.db = db

@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        # FIX
        pass

admin/views.py で:

from flask import g
@admin.route('/')
def index():
    # do something with g.db

実際に動作します。質問は次のとおりです。

  1. これはフラスコで接続を使用する最良の方法ですか?

  2. Teardown_request で明示的にリソースを再利用する必要がありますか? また、その方法は?

4

3 に答える 3

8

これはまだ興味深い質問だと思いますが、なぜ応答がないのですか...それで私の更新です。

最初の質問については、Flaskではcurrent_appを使用する方が明確だと思います。

app.pyで

app = Flask(__name__)
connection = Connection()
db = connection['test']
app.db = db

view.pyで

from Flask import current_app
db = current_app.db
# do anything with db

また、current_appを使用すると、アプリケーションファクトリを使用して、 http://flask.pocoo.org/docs/patterns/appfactories/として複数のアプリを作成できます。

そして2番目の質問については、私はまだそれを理解しています。

于 2012-07-14T19:22:11.880 に答える
0

ご提示いただいたもので大丈夫だと思います。Flask は、物事を整理する方法が非常に柔軟であり、常に 1 つの明白で正しい方法を提示するとは限りません。いくつかの小さな便利さを追加するフラスコ pymongo 拡張機能を利用することができます。私の知る限り、リクエストのティアダウンで接続を行う必要はありません。

于 2012-09-22T02:42:50.743 に答える