2012-07-08 9 views
6

私のFlaskアプリケーションでは、pymongoを直接使用したいと考えています。しかし、私は、それぞれの要求に対してpymongo接続を作成する最良の方法と、接続リソースを再利用する方法がわからない。Flaskで要求ごとにpymongo接続を作成する方法

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

app.pyで

:それは実際に動作

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

:管理者/ views.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 

。したがって、質問は次のとおりです:

  • これは、フラスコでConnectionを使用する最善の方法ですか?

  • teardown_requestでリソースを明示的に再利用する必要がありますか?

  • 答えて

    7

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

    最初の質問では、current_appを使用することはFlaskでより明確になると思います。 、複数のアプリを作成するために、アプリケーションファクトリを使用することができますview.py

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

    でapp.py

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

    INとCURRENT_APPを使用して

    としてhttp://flask.pocoo.org/docs/patterns/appfactories/

    そして、 2番目の質問のために、私はまだそれを考え出しています。

    0

    あなたのプレゼントは大丈夫だと思います。フラスコは、物事を整理する方法が柔軟すぎるので、必ずしも明白で正しい方法を提示するわけではありません。 flask-pymongo extensionを使用すると、いくつかの便利な機能が追加されます。私の知る限りでは、あなたはリクエストティアダウンで接続して何もする必要はありません。

    2

    ここフラスコ-pymnongo拡張子を使用しての例です:

    あなたのAPIメソッドの下
    app.config['MONGO_URI'] = 'mongodb://192.168.1.1:27017/your_db_name' 
    mongo = PyMongo(app, config_prefix='MONGO') 
    

    、その後、以下のようにapp.configをで

    (DB名まで)あなたのMongoDB URI:

    例dbが必要な場所:

    db = mongo.db 
    

    これで作業できます接続して、データを取得してください:

    users_count = db.users.count() 
    
    関連する問題