Flask-Mongoengine 始终连接到“测试”数据库

Flask-Mongoengine always connects to `test` database

我正在将 flask 与 flask-mongoengine 一起使用。该应用程序是通过应用程序工厂设置的,如 here.

所述

我的模型定义在单独的文件中,如下:

from flask_mongoengine import MongoEngine
db = MongoEngine()

class NodeModel(db.Document):
    node_id = db.UUIDField(primary_key=True)
    ....

__init__.py中的应用工厂如下所示:

def create_app():
    app = Flask(__name__, static_url_path=''
    ...
    app.config['MONGODB_DB'] = 'myDb'
    app.config['MONGODB_HOST'] = ....
    app.config['MONGODB_UUIDREPRESENTATION'] = 'standard'

    with app.app_context():
        from models import db
        db.init_app(app)
        ...
    
    return app

应用程序正确启动,所有路由都正常工作。但是,数据存储在默认的 test 数据库中,而不是 myDb。其他 MongoDB 配置,如主机和 MONGODB_UUIDREPRESENTATION 受到尊重。我已经研究这个问题几个小时了,但无济于事。我错过了什么?如何设置 flask-mongoengine 以连接正确的数据库?

如果你通过 app.config['MONGODB_SETTINGS'] 完成它是否有帮助? 例如

app.config['MONGODB_SETTINGS'] = {
    'db': 'myDb',
    'host': os.getenv('MONGODB_HOST', 'localhost:27017'),
}

此外,请注意 uri 中的数据库名称优先于名称。所以如果你使用

app.config['MONGODB_SETTINGS'] = {
    'db': 'myDb',
    'host': 'mongodb://localhost/',
    ...
}

mongoengine 将写入 test 数据库,因为在主机中设置了 none。

顺便说一下,我 认为 mongoengine 并不总是在 URI 中获取数据库名称,因为当我最近使用这个

app.config['MONGODB_SETTINGS'] = {
    'host': 'mongodb://localhost/myDb',
    ...
}

mongoengine 也一直写入 test

我遇到过同样的问题。当您从 Azure 门户获取连接字符串时,它看起来像这样。

export MONGODBCONNSTR="mongodb://<USERNAME>:<PASSWORD>@<HOST>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@cpe-self-service-db@"  

将我的数据库名称 'MYDB' 添加到 URI 中的此连接,如下所示。

export MONGODBCONNSTR="mongodb://<USERNAME>:<PASSWORD>@<HOST>:10255/MYDB?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@cpe-self-service-db@" 

然后我有来自

的更新
 app.config['MONGODB_SETTINGS'] = {
    'host': f'{os.environ.get("MONGODBCONNSTR")}/MYDB'
}

app.config['MONGODB_SETTINGS'] = {  
        'host': f'{os.environ.get("MONGODBCONNSTR")}'  
    }  

app.config['MONGODB_HOST'] = f'{os.environ.get("MONGODBCONNSTR")}'

对我有用。