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

Posted

技术标签:

【中文标题】使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错【英文标题】:error while following Tumblelog Application with Flask and MongoEngine 【发布时间】:2015-06-13 14:30:51 【问题描述】:

我正在关注 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",但仍然遇到同样的错误。

【问题讨论】:

【参考方案1】:

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

您遇到的错误是因为 MongoEngine 扩展在您的配置中找不到“db”条目,因此使用“默认”作为数据库名称。

编辑

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

如果你添加

from pymongo import read_preferences

到您的进口和

'read_preference': read_preferences.ReadPreference.PRIMARY

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

【讨论】:

我也试过了.. app.config["MONGODB_SETTINGS"] = 'db': "sencha_web_service", 'username': "", "password": "", "端口": 27017 @Samuel Littley 这是正确的 - 这是最新版本中的错误。 有人在 github 上报告过这个吗? 它是 pymongo 的一个问题.. 将 pymongo 降级到 2.7.2,现在它可以在 mongoengine-0.9.0 上正常工作 快速浏览一下 MongoDB JIRA 得出了这个结论:jira.mongodb.org/browse/PYTHON-719 看起来使用 pymongo 2.7 分支是目前的选择。

以上是关于使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask 和 MongoEngine 开发 Tumblelog 应用程序时出错

Flask,Pymongo和Mongoengine - ImportError:无法导入名称'app'

Flask mongoengine 分页

pip install flask-mongoengine报错

带有 mongoengine 的 Flask 应用程序的 Elastic Beanstalk WSGI 部署的“您尚未定义默认连接”

MongoEngine 的嵌入式文档问题