Mongodb 通过uri连接mongoengine

Mongodb 通过uri连接mongoengine,mongodb,heroku,flask,mongoengine,Mongodb,Heroku,Flask,Mongoengine,嗨,我有一个小烧瓶应用程序,我正在部署到heroku 我的本地配置如下所示: from flask import Flask from flask.ext.mongoengine import MongoEngine app = Flask(__name__) app.debug = True app.config["MONGODB_SETTINGS"] = {'DB': "my_app"} app.config["SECRET_KEY"] = "secretpassword" db = M

嗨,我有一个小烧瓶应用程序,我正在部署到heroku

我的本地配置如下所示:

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

app = Flask(__name__)
app.debug = True
app.config["MONGODB_SETTINGS"] = {'DB': "my_app"}
app.config["SECRET_KEY"] = "secretpassword"

db = MongoEngine(app)
因此,我知道我需要将应用程序配置为使用mongo
URI
连接方法,我有我的连接信息:

mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678
mongodb://:@alex.mongohq.com:10043/app12345678
我只是对修改我的应用程序以通过
URI
连接的语法有点困惑

任何帮助都将不胜感激。

当您查看时,您可以看到哪些配置变量可用

因此,这应该是可行的:

app.config["MONGODB_HOST"] = 'alex.mongohq.com/app12345678'
app.config["MONGODB_PORT"] = 10043
app.config["MONGODB_DATABASE"] = 'dbname'
app.config["MONGODB_USERNAME"] = 'user'
app.config["MONGODB_PASSWORD"] = 'password'
db = MongoEngine(app)
我不确定
app123
是应用程序还是数据库名称。你可能需要在周围摆弄一下才能获得连接。我对Heroku上的Mongokit+Mongokab也有同样的问题:)

您也可以像这样使用URI

app.config["MONGODB_SETTINGS"] = {'DB': "my_app", "host":'mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678'}
app.config[“MONGODB_设置”]={'DB':“我的_应用程序”,“主机”:'MONGODB:/:@alex.mongohq.com:10043/app12345678}
实际上,我不知道“MONGODB_设置”是在什么时候读取的,但当我在shell中尝试它时,它似乎起了作用。

所以我让它起作用了(最后):

从烧瓶导入烧瓶
从mongoengine导入连接
app=烧瓶(名称)
app.config[“MONGODB”]=“app12345678”
连接(
'app12345678',
用户名='heroku',
密码='a614e68b445d0d9d1c375740781073b4',
host='mongodb://:@alex.mongohq.com:10043/app12345678',
端口=10043
)

尽管我预计其他各种配置也会起作用。

我已经知道如何使用
flask.ext.mongoengine.mongoengine
包装类来完成这项工作,而不是
mongoengine.connect()


我尝试了app.config[“MONGODB_SETTINGS”]={“DB”:“app12345678”,“host”:'mongodb://@alex.mongohq.com:10043/app12345678和各种衍生工具,但仍然没有联系。heroku给了我
mongohq_URL
变量,所以这肯定是我所需要的全部了?使用URI时用户名和密码来自哪里?用户名/密码来自你的mongohq帐户:创建一个免费的沙盒帐户,然后在Databases->Admin->User为db创建用户名/密码。然后在Databases->Collections下单击“直接连接到您的数据库”,并首先尝试mongo命令。然后将用户/密码和应用程序信息复制到此处发布的解决方案中。如果您仍有兴趣使用MongoEngine包装类,请参阅我对您文章的回答:)
from flask import Flask
from mongoengine import connect

app = Flask(__name__)

app.config["MONGODB_DB"] = 'app12345678'
connect(
    'app12345678',
    username='heroku',
    password='a614e68b445d0d9d1c375740781073b4',
    host='mongodb://<user>:<password>@alex.mongohq.com:10043/app12345678',
    port=10043
)
from flask import Flask
from flask.ext.mongoengine import MongoEngine

app = Flask(__name__)

HOST = '<hostname>'  # ex: 'oceanic.mongohq.com'
db_settings = {
    'MONGODB_DB': '<database>',
    'MONGODB_USERNAME': '<username>',
    'MONGODB_PASSWORD': '<password>',
    'MONGODB_PORT': <port>,
}
app.config = dict(list(app.config.items()) + list(db_settings.items()))
app.config["MONGODB_HOST"] = ('mongodb://%(MONGODB_USERNAME)s:%(MONGODB_PASSWORD)s@'+
                               HOST +':%(MONGODB_PORT)s/%(MONGODB_DB)s') % db_settings

db = MongoEngine(app)

if __name__ == '__main__':
    app.run()
from flask.ext.mongoengine import MongoEngine
import inspect
print(inspect.getsource(MongoEngine))
    ...
    conn_settings = {
        'db': app.config.get('MONGODB_DB', None),
        'username': app.config.get('MONGODB_USERNAME', None),
        'password': app.config.get('MONGODB_PASSWORD', None),
        'host': app.config.get('MONGODB_HOST', None),
        'port': int(app.config.get('MONGODB_PORT', 0)) or None
    }
     ...
     self.connection = mongoengine.connect(**conn_settings)
     ...
     self.app = app