map*_*ple 7 python connection pymongo flask
在我的Flask应用程序中,我希望直接使用pymongo.但我不确定为每个请求创建pymongo连接以及如何回收连接资源的最佳方法是什么.
我知道pymongo中的Connection是线程安全的,并且内置了池.我想我需要创建一个全局的Connection实例,并使用before_request将它放入flask 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
Run Code Online (Sandbox Code Playgroud)
在admin/views.py中:
from flask import g
@admin.route('/')
def index():
# do something with g.db
Run Code Online (Sandbox Code Playgroud)
它确实有效.所以问题是:
这是在烧瓶中使用Connection的最佳方法吗?
我是否需要在teardown_request中明确回收资源以及如何执行此操作?
我仍然认为这是一个有趣的问题,但为什么没有回应...所以这是我的更新.
对于第一个问题,我认为使用current_app在Flask中更清晰.
在app.py中
app = Flask(__name__)
connection = Connection()
db = connection['test']
app.db = db
Run Code Online (Sandbox Code Playgroud)
在view.py中
from Flask import current_app
db = current_app.db
# do anything with db
Run Code Online (Sandbox Code Playgroud)
通过使用current_app,您可以使用应用程序工厂创建多个应用程序,如http://flask.pocoo.org/docs/patterns/appfactories/
而对于第二个问题,我还在搞清楚.