使用Flask和MongoEngine跟踪Tumblelog应用程序时出错

Nid*_* J. 8 python mongodb flask flask-mongoengine

我在这里关注tumbleblog应用程序

我的__init__.py:

from flask import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__)
app.config["MONGODB_SETTINGS"] = {'DB': "sencha_web_service", 'username': "<username>", "password": "<password>"}
app.config["SECRET_KEY"] = "KeepThisS3cr3t"

db = MongoEngine(app)

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

我收到错误:

mongoengine.connection.ConnectionError: Cannot connect to database default :
False is not a read preference.
Run Code Online (Sandbox Code Playgroud)

我想传递"alias"="default"app.config["MONGODB_SETTINGS"],但仍然得到同样的错误.

Sam*_*ley 11

在MONGODB_SETTINGS字典中,数据库名称的键应为"db",而不是"DB"(即全部为小写).

您得到的错误是因为MongoEngine扩展在您的配置中找不到'db'条目,因此使用'default'作为数据库名称.

编辑

在进一步检查时,似乎这是(Flask-)MongoEngine(或可能的pymongo)中某处的错误,其中mongoengine.connect中的read_preference的默认值为False而不是实际的读取首选项,并且未转换为实际的默认值. pymongo

如果你添加

from pymongo import read_preferences
Run Code Online (Sandbox Code Playgroud)

你的进口和

'read_preference': read_preferences.ReadPreference.PRIMARY
Run Code Online (Sandbox Code Playgroud)

到你的配置字典,它应该工作(这是pymongo中的默认read_preference)