2017-08-10 127 views
0

我打电话给db dev将数据插入到它的集合中。但它创建了一个新的集合并将数据插入admin db。烧瓶Pymongo插入

from app import app 
from flask import Flask 
from flask import jsonify 
from flask import request 
from flask_pymongo import PyMongo 

@app.route('/') 
@app.route('/index') 
def index(): 
    return "Hello, World!" 

app.config['MONGO_DBNAME'] = 'dev' 
app.config['MONGO_AUTH_SOURCE'] = 'admin' 
app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017/admin' 

mongo = PyMongo(app) 

@app.route('/mongo', methods=['GET']) 
def get_all_docs(): 
    doc = mongo.db.abcd.insert({'abcd':'abcd'}) 
    return "Inserted" 

if __name__ == '__main__': 
    app.run(debug=True) 

我在这里错过了什么吗?

PS:我试着用dev替换admin。它给了pymongo.errors.OperationFailure: Authentication failed.我想那是因为验证数据在admin db。

app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017' 这也是行不通的。

+0

为什么就不能''MongoDB的替代admin:// @:27017/dev''?如果您正在阅读帖子,告诉您将AUTH_SOURCE或“admin”设置为数据库,那么这些来源实际上已过时。驱动程序通过“default”查看“admin”授权,并且您应该只需要有意使用其他命名空间的其他选项。由于您使用的是默认设置,因此其他设置不是必需的。 –

+0

@NeilLunn'pymongo.errors.OperationFailure:身份验证失败.'当我使用dev代替管理员。我已经在上面提到过了。 – Anubhav

+0

实际上用于连接的是什么?这个问题标签为mongoengine。你是真的使用这个,还是你在你自己的代码中调用了原始的pymongo驱动程序?因为这个'PyMongo(app)'调用没有被AFAIK使用。最重要的是**你是possitive **该帐户实际上可以访问'dev'数据库?您是否尝试过使用其他来源的帐户连接和使用该集合? –

回答

0

在MONGO_URI替换admindev导致Authentication Error
添加authSource将使用admin db进行验证。
要做到这一点,与dev?authSource=admin

from app import app 
from flask import Flask 
from flask import jsonify 
from flask import request 
from flask_pymongo import PyMongo 

@app.route('/') 
@app.route('/index') 
def index(): 
    return "Hello, World!" 

app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017/dev?authSource=admin' 

mongo = PyMongo(app) 

@app.route('/mongo', methods=['GET']) 
def get_all_docs(): 
    doc = mongo.db.abcd.insert({'abcd':'abcd'}) 
    return "Inserted" 

if __name__ == '__main__': 
    app.run(debug=True)