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

error while following Tumblelog Application with Flask and MongoEngine

我正在关注 tumbleblog 应用程序 here

我的__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()

我收到错误:

mongoengine.connection.ConnectionError: Cannot connect to database default :
False is not a read preference.

我尝试在 app.config["MONGODB_SETTINGS"] 中传入 "alias"="default" 但仍然出现相同的错误。

在您的 MONGODB_SETTINGS 字典中,数据库名称的键应该是 'db',而不是 'DB'(即全部小写)。

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

编辑

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

中的实际默认值

如果你添加

from pymongo import read_preferences

到您的进口和

'read_preference': read_preferences.ReadPreference.PRIMARY

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