大家好,又见面了,我是你们的朋友全栈君。
故事背景:
我在虚拟机(ip:192.168.xx.xx)上建立了一个mongo的数据库,里面已经存好了内容。里面的一个database叫做 “adb”, 里面有个collection, 叫做”acol”
我打开了mongo的认证功能,并且把用户”userA”授予了访问”adb”的权限。
然后,我用下面的方式连接
代码语言:javascript复制import pymongo
host = '192.168.xx.xx'
conn = pymongo.MongoReplicaSetClient('mongodb://%s:%s@%s' % ("userA", "password", host))
db = conn["adb"]
collect = db["acol"]
结果报错:
pymongo.errors.OperationFailure: command SON([(‘authenticate’, 1), (‘user’, u”), (‘nonce’, u”), (‘key’, u”)]) on namespace admin.$cmd failed: auth failed
然后,各种纠结。后来看了官网,终于找到了解决方法。
http://api.mongodb.org/python/current/examples/authentication.html
1.查看pymongo版本: 结果为3.2
代码语言:javascript复制pip list -v
2.查看mongoDB版本: 结果为2.6
在mongo终端中输入
代码语言:javascript复制db.version()
mongoDB有不同的认证机制,3.0版本以后采用的是‘SCRAM-SHA-1’, 之前的版本采用的是‘MONGODB-CR’。所以,以我的版本情况,显然应该用’MONGODB-CR’
用下面的方法连接,就成功了。
代码语言:javascript复制host = '192.168.xx.xx'
client = pymongo.MongoClient(host)
client.adb.authenticate("userA", "password", mechanism='MONGODB-CR')
db = client["adb"]
collection = db["acol"]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154476.html原文链接:https://javaforall.cn