2016-03-24 16 views
7

: Çalışır ve tanırMongoLab ben kabuğunda çalıştırırsanız/PyMongo bağlantı hatası

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

beni veritabanına bağlanmak ve bilgi çekmesi. Ama piton uygulaması (Şişe) içinde değilim ve eğer bu çalıştırın:

import pymongo 

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

db = client["dbname"] 

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

Bana veren:

pymongo.errors.OperationFailure: Authentication failed. 

Ben (bu insert_one ulaşmadan önce onu başarısız olduğundan eminim) ara, ama tamamen emin değilim.

Teşekkürler!

Düzenleme:

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: İsteğe göre , burada tam geri arama olduğunu doğrulaması başarısız oldu.

+0

Tüm geri izlemeyi içerir misiniz? Böylece, 'insert_one (...) 'çağrısından önce başarısız olursa emin olabiliriz. Hata, auth ile ilgili olsa da ve muhtemelen "MongClient" oluşturma sırasında anlamına gelecektir: P –

+0

, teşekkürler –

cevap

15

Bunu çözdüm. Bunu python dosyasından yapabilir ve aşağıdaki gibi çalışabilirsiniz:

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

Lütfen, lütfen doğru şekilde işaretleyiniz. Bu gem :) – Nabin

+0

bu ne anlama geliyor? İlk satırda ne yapmaya çalışıyorsunuz gibi: pymongo.MongoClient (ab123456.mlab.com, 123456). Bağlantı noktası numarası ikinci bir argüman olarak görünüyor mu? veya parola mı ama kullanıcı adı yok mu? Bu – frogeyedpeas

+0

'u nasıl yorumlayacağımı bilmiyorum. İddiaya göre, söz konusu URL OP tarafından sağlanan ve daha mantıklı olacak şekilde ifade ediyorum :) – frogeyedpeas