2017-08-10 14 views
0

私はそのコレクションにデータを挿入するためにdb devを呼び出しています。しかし、新しいコレクションを作成し、admin dbにデータを挿入しています。Flask Pymongo Insert

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に置き換えようとしました。それはpymongo.errors.OperationFailure: Authentication failed.を与えました。認証データがadmin dbにあるので、私はそれを推測します。

app.config['MONGO_URI'] = 'mongodb://<user>:<password>@<url>:27017' これも機能しませんでした。

+0

なぜ単に ' 'のMongoDBとadminを置き換える:// @:27017/dev''? AUTH_SOURCEまたは "admin"をデータベースとして設定するように指示する投稿を読んでいる場合、それらのソースは実際には古くなっています。ドライバは '' admin ''を認可のために" default "で調べます。意図的に別の名前空間が使用された場合にのみ、他のオプションが必要です。デフォルトを使用しているので、他の設定は必要ありません。 –

+0

@NeilLunn 'pymongo.errors.OperationFailure:Authentication failed .'私はadminの代わりにdevを使用します。私はこれを上記で言及した。 – Anubhav

+0

接続には実際に何が使用されていますか? mongoengineとタグ付けされた質問。あなたは実際にこれを使用していますか、ここには表示されていない独自のコードでraw pymongoドライバを呼び出していますか?その 'PyMongo(app)'呼び出しはAFAIKによって使用されないためです。最も重要なのは、あなたが本当に**あなたのアカウントは実際に 'dev'データベースにアクセスできるのでしょうか?実際に、別のソースからそのアカウントを使用してコレクションに接続して作業しましたか? –

答えて

0

devでMONGO_URIに置き換えると、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)