如何使用flask_mongoengine关闭数据库?

时间:2019-01-31 00:30:30

标签: python mongodb flask mongoengine flask-mongoengine

我正在学习使用flask和flask_mongoengine创建一个网站。遵循Flask教程1.0.2版本。但是我遇到了一个问题,如何实现get_db()close_db()函数?

当前,我正在做的是:

myapp.py

....
def create_app():
    app = Flask(__name__)

    from db import db
    db.init_app(app)

    @app.route('/')
    def home():
        ...

    return app

db.py

from flask import g
from flask_mongoengine import MongoEngine

db = MongoEngine()

def get_db():
    g.db = ???
    return g.db

def close_db():
    db = g.pop('db', None)

    if db is not None:
        ??? # db.close() doesn't exist!!!

我对如何执行此部分感到非常困惑。有人可以提出建议吗?在flask_mongoengine教程页面中,它们没有实现get_db()close_db() ...

1 个答案:

答案 0 :(得分:1)

之所以会出现混乱,是因为这些教程中的编程模式太多。在flask-1.0.2教程中,他们使用getter方法模式,但是flask-mongoengine依赖于将数据库引导到flask-app-instance,而后者依赖于构建器模式— Flask Application Factories。它可能仍然令人困惑,但是我将向您展示它是如何实现的。

create_app中引导烧瓶烧瓶引擎:

def create_app(test_config=None):
    app = Flask(__name__)
    # configure mongo settings here like in flask-mongoengine docs

    g.db = db = MongoEngine()
    db.init_app(app)

def get_db():
    return g.db

def close_db():
    pass

close_db()是什么?好吧,如果您选择的数据库需要关闭一些清理操作,则该功能存在。但是我在mongoengine文档中没有找到任何明确提及mongoengine db连接需要您执行清理操作才能关闭的操作,因此您可以通过它。