2016-03-24 21 views
7

Jeśli uruchomić w powłoce:MongoLab błąd połączenia/PyMongo

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

To działa i pozwala mi połączyć się z bazą danych i wyciągnąć informacje. Ale jeśli jestem w moim aplikacji Pythona (kolba) i uruchomić to:

import pymongo 

client = pymongo.MongoClient("mongodb://user:[email protected]:219xx/dbname") 

db = client["dbname"] 

db.users.insert_one({ 
    "user1": "hello" 
}) 

To daje mi:

pymongo.errors.OperationFailure: Authentication failed. 

Jestem całkiem pewien, że w przypadku braku zanim dojdzie do insert_one() zadzwoń, ale nie jestem całkowicie pewien.

Dzięki!

Edit: Wnioskiem, tutaj jest pełna zwrotna:

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: Uwierzytelnianie nie powiodło się.

+0

Czy możesz uwzględnić cały zwrot pieniędzy? W ten sposób możemy być pewni, że zawiedzie przed wywołaniem 'insert_one (...)'. Chociaż błąd dotyczy auth i prawdopodobnie oznaczałoby to podczas tworzenia 'MongClient': P –

+0

dodał, że, dzięki –

Odpowiedz

15

Wymyśliłem to. Możesz to zrobić z pliku Pythona i zadziała:

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

proszę, proszę, zaznacz to jako poprawne. To jest klejnot :) – Nabin

+0

co to znaczy? jak to, co próbujesz przekazać w pierwszej linii: pymongo.MongoClient (ab123456.mlab.com, 123456). Czy numer portu pojawia się jako drugi argument? lub jest hasłem, ale bez nazwy użytkownika? nie jestem pewien, jak to interpretować – frogeyedpeas

+0

Chyba najlepiej frazę, że pod względem URL OP dostarczone, a potem będzie więcej sensu :) – frogeyedpeas

Powiązane problemy