2017-08-10 285 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)