MongoLab/PyMongo connection error

12,860

Solution 1

I figured it out. You can do this from the python file and it will work:

connection = pymongo.MongoClient(ab123456.mlab.com, 123456)
db = connection[databasename]
db.authenticate(database_user, database_pass)

Solution 2

Appending /?authSource=admin helped me. Full Example:

uri = 'mongodb://username:[email protected]:27017/?authSource=admin'

client = MongoClient(uri)
db = client.test

result = db.users.find()

for document in result:
    print(document)

Version: pymongo 3.7.2

Share:
12,860
Derek Schuster
Author by

Derek Schuster

Updated on June 15, 2022

Comments

  • Derek Schuster
    Derek Schuster almost 2 years

    If I run in the shell:

    mongo ds0219xx.mlab.com:219xx/dbname -u user -p pass
    

    It works and allows me to connect to the database and pull information. But if I'm within my python application (Flask) and run this:

    import pymongo
    
    client = pymongo.MongoClient("mongodb://user:[email protected]:219xx/dbname")
    
    db = client["dbname"]
    
    db.users.insert_one({
      "user1": "hello"
    })
    

    It gives me an:

    pymongo.errors.OperationFailure: Authentication failed.
    

    I'm pretty sure it's failing before it gets to the insert_one() call, but I'm not completely sure.

    Thanks!

    Edit: By request, here is the full callback:

    Traceback (most recent call last):
    File "run.py", line 1, in <module>
    from app import app
    File "/Users/Derek/Documents/programming/shenalum/app/__init__.py", line 6, in <module>
    from app import views
    File "/Users/Derek/Documents/programming/shenalum/app/views.py", line 4, in <module>
    from data import get_posts, get_user_info
    File "/Users/Derek/Documents/programming/shenalum/app/data.py", line 9, in <module>
    "user1": "hello"
    File "/usr/local/lib/python2.7/site-packages/pymongo/collection.py", line 622, in insert_one
    with self._socket_for_writes() as sock_info:
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
    File "/usr/local/lib/python2.7/site-packages/pymongo/mongo_client.py", line 718, in _get_socket
    with server.get_socket(self.__all_credentials) as sock_info:
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
    File "/usr/local/lib/python2.7/site-packages/pymongo/server.py", line 152, in get_socket
    with self.pool.get_socket(all_credentials, checkout) as sock_info:
    File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
    File "/usr/local/lib/python2.7/site-packages/pymongo/pool.py", line 541, in get_socket
    sock_info.check_auth(all_credentials)
    File "/usr/local/lib/python2.7/site-packages/pymongo/pool.py", line 306, in check_auth
    auth.authenticate(credentials, self)
    File "/usr/local/lib/python2.7/site-packages/pymongo/auth.py", line 436, in authenticate
    auth_func(credentials, sock_info)
    File "/usr/local/lib/python2.7/site-packages/pymongo/auth.py", line 416, in _authenticate_default
    return _authenticate_scram_sha1(credentials, sock_info)
    File "/usr/local/lib/python2.7/site-packages/pymongo/auth.py", line 188, in _authenticate_scram_sha1
    res = sock_info.command(source, cmd)
    File "/usr/local/lib/python2.7/site-packages/pymongo/pool.py", line 213, in command
    read_concern)
    File "/usr/local/lib/python2.7/site-packages/pymongo/network.py", line 99, in command
    helpers._check_command_response(response_doc, None, allowable_errors)
    File "/usr/local/lib/python2.7/site-packages/pymongo/helpers.py", line 196, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
    

    pymongo.errors.OperationFailure: Authentication failed.