使用Python连接MongoDB数据库遇错误,求排查(附代码)
Python连接MongoDB报错的修复方案
原代码存在的问题
- 过时认证方法:
authenticate()是PyMongo 3.x之前的旧用法,现已不推荐,易引发兼容性问题 - 认证数据库错误:原代码对
test库做认证,但目标库是testdb,若用户是在testdb下创建的,此处认证对象不符 - 连接逻辑拆分:单独调用认证方法,不如直接在连接配置中整合认证信息更可靠
修复后的代码示例
方式1:连接字符串整合认证信息
import pymongo DATABASE_NAME = "testdb" DATABASE_USERNAME = "testuserid" DATABASE_PASSWORD = "testpass" # 连接字符串包含地址、端口、用户名、密码及认证数据库 DATABASE_URI = f"mongodb://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@10.10.100.100:22222/{DATABASE_NAME}?authSource={DATABASE_NAME}" try: myclient = pymongo.MongoClient(DATABASE_URI) mydb = myclient[DATABASE_NAME] # 验证连接有效性(可选,通过获取集合列表确认) mydb.list_collection_names() print("[+] Database connected!") except Exception as e: print("[+] Database connection error!") raise e
方式2:通过参数传递认证信息
若不想在URI中暴露密码,可拆分参数传递:
import pymongo DATABASE_NAME = "testdb" DATABASE_HOST = "10.10.100.100" DATABASE_PORT = 22222 DATABASE_USERNAME = "testuserid" DATABASE_PASSWORD = "testpass" try: myclient = pymongo.MongoClient( host=DATABASE_HOST, port=DATABASE_PORT, username=DATABASE_USERNAME, password=DATABASE_PASSWORD, authSource=DATABASE_NAME # 必须与用户创建时指定的数据库一致 ) mydb = myclient[DATABASE_NAME] mydb.list_collection_names() print("[+] Database connected!") except Exception as e: print("[+] Database connection error!") raise e
关键注意事项
- 认证数据库(authSource):如果用户是在
admin库创建的,需将authSource改为admin,而非目标库testdb - PyMongo版本:执行
pip install --upgrade pymongo确保使用最新版 - 网络权限:确认本地机器能访问10.10.100.100的22222端口,无防火墙或安全组限制
内容的提问来源于stack exchange,提问作者Jayven Javier
相关产品推荐
相关产品推荐

