Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoLab/PyMongo connection error

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.

like image 385
Derek Schuster Avatar asked Mar 24 '16 12:03

Derek Schuster


People also ask

Can not import Pymongo?

Importerror cannot import name mongoclient from pymongo error comes only when pymongo python package is not properly install. Pymongo is python driver for mongo Database . Developer mainly uses Mongo for unstructured data. Mostly the data around in todays environment is unstructured data.

What is MongoClient in Pymongo?

The Python PyMongo MongoClient class allows Developers to make connections to MongoDB in development with the help of client instances. The use of the PyMongo driver with MongoClient class makes it easier to code and connect to MongoDB easily and quickly.

How do I catch a MongoDB error?

For MongoDB, there is an internal system of error classification. MongoDB assigns different names and codes to errors that can be seen by console logging an error. By console logging the errors, you can see what the error stacktrace (the error metadata and where it occurs in your app) looks like.


1 Answers

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

like image 111
Tim Schäfer Avatar answered Nov 10 '22 10:11

Tim Schäfer