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")}'
对我有用。
我正在将 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")}'
对我有用。