【发布时间】:2016-11-12 07:04:08
【问题描述】:
我用 mongolab 建立了一个数据库,其中 db 与集合具有相同的名称。我决定我不喜欢这个删除它并制定了一个更好的命名方案。我为新数据库添加了一个新用户/密码并尝试进行身份验证。它一直在失败。不知道为什么。我仔细检查了我的凭据,它们是正确的。我检查了 mongolab 提供的 URI,这也是正确的。此代码适用于第一个数据库。
这是我的登录代码
def __init__(self, user_id, password, database, collection):
# mongodb://<dbuser>:<dbpassword>@ds017205.mlab.com:17205/words
mongodb_uri = "mongodb://" + user_id + ":" + password + "@ds017205.mlab.com:17205/" + database
client = pymongo.MongoClient(mongodb_uri)
db = client[database]
self.collection = db[collection] # is declared in class
这会产生以下错误
Error
Traceback (most recent call last):
File "C:\Users\Austin\PycharmProjects\Words\test_mongodb.py", line 15, in testUpdate
results = self.mongodb_obj.update(test)
File "C:\Users\Austin\PycharmProjects\Words\mongodb.py", line 38, in update
upsert=True
File "C:\Python33\lib\site-packages\pymongo\collection.py", line 2235, in update
with self._socket_for_writes() as sock_info:
File "C:\Python33\lib\contextlib.py", line 48, in __enter__
return next(self.gen)
File "C:\Python33\lib\site-packages\pymongo\mongo_client.py", line 718, in _get_socket
with server.get_socket(self.__all_credentials) as sock_info:
File "C:\Python33\lib\contextlib.py", line 48, in __enter__
return next(self.gen)
File "C:\Python33\lib\site-packages\pymongo\server.py", line 152, in get_socket
with self.pool.get_socket(all_credentials, checkout) as sock_info:
File "C:\Python33\lib\contextlib.py", line 48, in __enter__
return next(self.gen)
File "C:\Python33\lib\site-packages\pymongo\pool.py", line 541, in get_socket
sock_info.check_auth(all_credentials)
File "C:\Python33\lib\site-packages\pymongo\pool.py", line 306, in check_auth
auth.authenticate(credentials, self)
File "C:\Python33\lib\site-packages\pymongo\auth.py", line 436, in authenticate
auth_func(credentials, sock_info)
File "C:\Python33\lib\site-packages\pymongo\auth.py", line 416, in _authenticate_default
return _authenticate_scram_sha1(credentials, sock_info)
File "C:\Python33\lib\site-packages\pymongo\auth.py", line 216, in _authenticate_scram_sha1
res = sock_info.command(source, cmd)
File "C:\Python33\lib\site-packages\pymongo\pool.py", line 213, in command
read_concern)
File "C:\Python33\lib\site-packages\pymongo\network.py", line 99, in command
helpers._check_command_response(response_doc, None, allowable_errors)
File "C:\Python33\lib\site-packages\pymongo\helpers.py", line 196, in _check_command_response
raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: Authentication failed.
我们将不胜感激。谢谢
【问题讨论】:
-
您使用的是什么版本的 pymongo 和 MongoDB?根据authentication examples doc page,您需要对密码中的任何字符进行转义吗?
-
我使用的是最新版本的 mongodb 和 pymongo。下载了最近的一个三四天去。为 pymongo 安装了 pip
-
刚刚尝试转义密码中的特殊内容并得到相同的结果。它也可以在没有转义的情况下工作。
标签: python mongodb authentication pymongo nosql