PyMongo基础功能失效求助:ServerSelectionTimeoutError报错排查
解决MongoDB连接失败的ServerSelectionTimeoutError问题
我来帮你拆解这两个连接失败的问题,本质上都是客户端无法和MongoDB服务器建立有效连接,咱们一步步来解决:
先搞懂两个错误的核心原因
- WinError 10049:你用的
0.0.0.0是服务器端用来监听所有网卡的地址,不是客户端发起连接的有效地址;另外5001也不是MongoDB的默认端口,除非你特意修改过配置文件。 - WinError 10061:目标机器主动拒绝连接,大概率是MongoDB服务没启动,或者你的连接地址/端口和服务实际运行的参数不匹配。
分步排查与解决
1. 先确认MongoDB服务正在运行
这是最容易忽略的点:
- Windows用户可以按Win+R输入
services.msc打开服务管理器,找到MongoDB相关服务(通常叫MongoDB Server),确保状态是正在运行。如果没运行,右键点击「启动」即可。 - 如果没把MongoDB安装成服务,直接找到安装目录下的
bin文件夹,运行mongod.exe(记得指定数据目录,比如mongod --dbpath D:\mongodb\data,不然会启动失败)。
2. 修正连接地址与端口配置
第一个案例的代码修正
把错误的监听地址和端口换成客户端可用的参数:
import pymongo MONGO_DBNAME = 'db' MONGO_HOST = 'localhost' # 如果MongoDB和代码在同一机器,用这个;不在的话换成服务器实际IP MONGO_PORT = 27017 # MongoDB默认端口,没改配置就用这个 MONGO_URI = f'mongodb://{MONGO_HOST}:{MONGO_PORT}/{MONGO_DBNAME}' # 先加个连接测试,提前验证是否能连上 mongo = pymongo.MongoClient(MONGO_URI) try: mongo.admin.command('ping') print("MongoDB连接成功!") except Exception as e: print(f"连接失败:{e}") data = mongo.db['data'] data.insert_one({'data':'0.0'})
第二个案例的排查方向
你代码里的MONGO_URI = 'mongodb://localhost:27017/robo'格式是对的,但拒绝连接说明:
- 先确认MongoDB服务是否启动(步骤1);
- 如果服务已经启动,检查MongoDB配置文件
mongod.cfg里的net.bindIp项:如果它设置了特定IP(比如192.168.1.100),那你需要把代码里的localhost换成这个IP;测试环境可以改成0.0.0.0允许所有IP连接(生产环境要注意安全)。
3. 用MongoDB自带工具验证连接
先别着急改代码,用mongosh(新版)或者mongo(旧版)命令行工具测试连接是否正常:
mongosh "mongodb://localhost:27017"
如果能成功进入MongoDB shell,说明服务没问题,问题出在代码里;如果连shell都连不上,继续排查服务启动参数或防火墙。
4. 其他可能的坑
- 防火墙拦截:Windows防火墙可能挡住了MongoDB的端口,需要在防火墙设置里添加允许
27017端口(或你自定义的端口)的入站规则; - 认证配置:如果你的MongoDB开启了用户名密码认证,连接URI需要带上认证信息,格式是
mongodb://用户名:密码@localhost:27017/数据库名。
内容的提问来源于stack exchange,提问作者Joshua Brewster
相关产品推荐
相关产品推荐

