2016-08-25 10 views
2

私はMongoDBの中に私のデータベースのユーザーを作成しました。私はmongoシェルを使って、ユーザーがデータベースにアクセスするための適切な権限を持っていることを確認しました。 は、今私は、データベースにアクセスするために、私のPythonプログラムを使用したい、と私はPyMongoを使用しています。 mongodを無許可モード(オプション--authなし)で実行すると、Pythonクライアントが正常に動作します。しかし、--authオプションを使用すると、Pythonクライアントはそれ以上動作しません。実際には、それは私がコードには何も変更していないので、理解しやすいunauthorized errorを、報告します。ここに私のtestデータベースに接続するためのコードは次のとおりです。接続MongoDBの

from pymongo import MongoClient 
client = MongoClient() 
db = client.test 
cursor = db.restaurants.find() 
for document in cursor: 
    print(document) 

私の質問は、私が以前に作成したユーザ名/パスワードを使用するPythonコードを変更することができる方法ですか?私はクライアントのドキュメントを見てきましたが、情報はありません。

答えて

2
client = MongoClient("mongodb://username:[email protected]/dbname") 

これは、接続先と接続方法をクライアントに伝えるための通常の形式です。あなたが使用している方法(パラメータをまったく使用しない)はデフォルトで、認証なしでデフォルトのポート上のローカルmongoのインストールになります。

+0

それだけで動作します:あなたのコードは次のようになります。問題が発生します:多くのおかげでは、パスワードが(「」または「@」のように)予約文字が含まれている場合があることに注意してください – lenhhoxung

+0

。私はこの問題を抱えていたので、[それについての質問](http://stackoverflow.com/questions/39237813/how-to-escape-in​​-a-password-in-pymongo-connection)を作成しました。 – gmauch

1

Danielle's answerのほかに、あなたもそのためauthenticate方法を使用することができます。

from pymongo 
import MongoClient 
client = MongoClient() 
db = client.test 
db.authenticate('user', 'password', mechanism=<either 'SCRAM-SHA-1' or 'MONGODB-CR', being 'MONGODB-CR' the default authentication mechanism Before MongoDB 3.0>) 
cursor = db.restaurants.find() 
for document in cursor: 
    print(document)