MongoLab/PyMongo connection error
Clash Royale CLAN TAG#URR8PPP
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:pass@ds0219xx.mlab.com: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.
insert_one(...)
MongClient
added that, thanks
– Derek Schuster
Mar 24 '16 at 12:38
2 Answers
2
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)
Please please please, mark it as correct. This is gem :)
– Nabin
May 13 '17 at 14:31
what does this mean? like what are you trying to convey in the first line: pymongo.MongoClient(ab123456.mlab.com, 123456). Does the port number appear as a second argument? or is the password but no username? i'm not sure how to interpret this
– frogeyedpeas
Jul 21 '17 at 0:27
I guess ideally phrase that in terms of the URL OP supplied and then it'll make more sense :)
– frogeyedpeas
Jul 21 '17 at 0:31
pymongo.errors.ConnectionFailure: timed out
– pyd
May 23 at 6:03
pymongo.errors.ConnectionFailure: timed out
One caveat here. The characters "ab1" are probably referring to the server name, whereas "23456" would be the port, not 123456. So, heads up.
– Jace
Jul 4 at 17:42
The answer given by @Derek Schuster was correct. Just to make it more clear.
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. :)
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
Could you include the whole traceback? That way we could be sure if it fails before the
insert_one(...)
call. Though the error is about auth and that would probably mean duringMongClient
creation :P– Ilja Everilä
Mar 24 '16 at 12:33