MongoLab / PyMongo Connection Error

If I run the shell:

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

It works and allows me to connect to the database and retrieve information. But if I enter my python (Flask) application and run this:

 import pymongo client = pymongo.MongoClient("mongodb://user: pass@ds0219xx.mlab.com :219xx/dbname") db = client["dbname"] db.users.insert_one({ "user1": "hello" }) 

This gives me:

 pymongo.errors.OperationFailure: Authentication failed. 

I am sure this fails before it gets to the insert_one () call, but I'm not quite sure.

Thanks!

Edit: Upon request, here is a complete 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.

+9
python flask mongodb pymongo mlab
source share
4 answers

I get it. You can do this from a python file and it will work:

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

Adding /?authSource=admin helped me. Full example:

 uri = 'mongodb://username: password@r1.example.net :27017/?authSource=admin' client = MongoClient(uri) db = client.test result = db.users.find() for document in result: print(document) 

Version : Pimongo 3.7.2

+1
source share

The answer given by @Derek Schuster was correct. Just to make it clearer.

 DB_NAME = database_name DB_HOST = dsxxxxxx.mlab.com DB_PORT = 12345 DB_USER = user DB_PASS = pass connection = MongoClient(DB_HOST, DB_PORT) db = connection[DB_NAME] db.authenticate(DB_USER, DB_PASS) 

Hope it helps. :)

0
source share

You need to authenticate after choosing a database for mongo <4.0

0
source share

All Articles