由于公司的mongoDB部署在容器平台
在本地测试 没有问题 项目部署于容器平台之后 报pymongo.errors.OperationFailure: Authentication failed.
之前有人遇到同样的问题 但是 导致认证失败的原因有多个 在stackoverflow上有类似方案 但是中文博客没有 导致 还是费了一番功夫
做过的尝试:
1.修改认证机制 因为MongoDB版本为 3.4.0 所以修改为 SCRAM-SHA-1
2.使用APIconnection .api.authenticate(name.psswd)
3.升级pymongo版本
终极解决方案:
1.将pymongo版本与MongoDB版本保持一致
2.使用以下代码模板
# --coding:utf-8--
import pymongo
from urllib import quote_plus
from pymongo import MongoClient
#/?replicaSet=rs0
uri = 'mongodb://mongo-0.mongo.public,mongo-1.mongo.public,mongo-2.mongo.public,mongo-3.mongo.public,mongo-4.mongo.public:27017/log_fieldmap'
clint=MongoClient(uri)
db = clint['log_fieldmap']
db.authenticate('username, 'pwd')
coll = db['xxx.com']
result = coll.insert_one({"abc":123})
print result
clint.close()
异常原因:
在开启认证模式之后,如果将用户名密码写入url中 默认连接的数据库是admin,事实上我所连接的数据库并不是admin 所以 用户名和密码是无效的 所以导致认证失败
解决方案 在URL中指定所要连接的数据库 或者是 在 选择数据库之后 ( db = clint['log_fieldmap ']该代码之后 ) 添加认证 db.authenticate('username, 'pwd')
异常完美解决