使用Flask和PyMongo

un1*_*n1t 2 python mongodb flask

我有Flask应用程序,看起来像这样:

from flask import Flask
app = Flask(__name__)
from pymongo import MongoClient

def get_db():
    c = MongoClient()
    return c.mydb

@app.route("/")
def hello():
    db = get_db()
    db.foo.find_one(...)
    ...

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

似乎它工作正常.但我不确定一件事.我在每个视图调用中创建一个MongoClient实例(以及与db的连接).但我应该关闭连接吗?

也许我应该在每个视图调用后关闭连接,如下所示:

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

@app.teardown_request
def teardown_request(exception):
    g.db.close()
Run Code Online (Sandbox Code Playgroud)

你怎么处理这个东西?

Joh*_*yHK 5

MongoClient内置了连接池支持,默认大小为10.因此,您应创建一个MongoClient由所有视图调用保持打开和共享的实例.