sharafjaffri sharafjaffri - 1 year ago 163
Python Question

pymongo auth failed in python script

I have installed mongodb and enabled auth. and its working find. I can connect it from remote notebook using robomongo application:

PORT: 27017
DATEBASE: prod-db
USERNAME: user_name
PASS: user_password
Auth Mechanism: MONGODB-CR

and We can connect from server shell locally using:

$ mongo prod-db -u user_name -p user_password

Everything works fine, but when we try it using pymongo api. authentications failed. below is the python code:

from pymongo import MongoClient

client = MongoClient()
client.prod_db.authenticate('user_name', 'user_password', mechanism='MONGODB-CR')
db = client.prod_db
result = db.users.find()

for document in result:

Tools used:

python 2.7
pymongo versiob 3.3.1
MongoDB shell version: 2.6.10
$ mongod --version
db version v2.6.10
2016-10-31T16:34:59.868+0000 git version: nogitversion
2016-10-31T16:34:59.868+0000 OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016

Error trace:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 1018, in authenticate
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 444, in _cache_credentials
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 343, in authenticate
auth.authenticate(credentials, self)
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 464, in authenticate
auth_func(credentials, sock_info)
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 439, in _authenticate_mongo_cr
sock_info.command(source, query)
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 239, in command
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 102, in command
helpers._check_command_response(response_doc, None, allowable_errors)
File "/usr/local/lib/python2.7/dist-packages/pymongo/", line 205, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)

problem was with database name, following code works fine:

from pymongo import MongoClient

client = MongoClient('mongodb://user_name:user_password@localhost:27017/prod-db')
db = client['prod-db']

result = db.users.find()
for document in result:
print document

Answer Source

Please try something like this:

client = MongoClient("mongodb://user_name:user_password@SERVER_IP/prod-db")
db = client['prod-db']