如何用 flask_mongoengine 关闭数据库?

How to close db with 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() ...

混乱的发生是因为在那些教程中有太多的编程模式。在 flask-1.0.2 教程中,他们使用 getter 方法模式,但是 flask-mongoengine 依赖于将数据库引导到 flask-app-instance,这依赖于构建器模式 — Flask Application Factories。它可能仍然令人困惑,但我会告诉你它是如何完成的。

Bootstrap create_app 中的 flask-mongoengine:

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 数据库连接需要你的清理操作才能关闭,所以你可以通过它。