使用Python3+PyMongo连接MongoDB遇WinError10061连接拒绝错误求助
解决PyMongo连接MongoDB时的ServerSelectionTimeoutError问题
这个错误pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it本质是你的Python程序无法连接到本地MongoDB服务,大概率是服务未启动、端口配置不对或者被防火墙拦截了,下面是一步步的排查和解决方法:
1. 优先检查MongoDB服务是否在运行
这是最常见的原因,针对不同系统操作如下:
- Windows系统:按下
Win + R输入services.msc回车打开服务管理器,找到MongoDB相关服务(通常名为MongoDB Server),如果状态是“已停止”,右键点击选择「启动」;还可以把启动类型改成「自动」,避免下次开机还要手动启动。 - macOS/Linux系统:
- 用Homebrew安装的MongoDB:执行
brew services list查看状态,未运行则用brew services start mongodb-community启动。 - systemd系列系统(如Ubuntu):执行
systemctl status mongod查看状态,未运行则用sudo systemctl start mongod启动。
- 用Homebrew安装的MongoDB:执行
2. 确认MongoDB监听端口是否为27017
MongoDB默认用27017端口,若配置被修改过,需要对应调整连接代码:
- 打开MongoDB配置文件(Windows在安装目录的
mongod.cfg,Linux在/etc/mongod.conf),找到net.port项确认端口号。 - 若端口不是27017,连接时要手动指定:
Client = MongoClient('mongodb://localhost:你的自定义端口')
3. 检查防火墙是否拦截了端口
本地防火墙或杀毒软件可能会阻止27017端口的连接:
- 暂时关闭防火墙测试,如果能正常连接,就把MongoDB程序或27017端口加入防火墙允许列表。
- 也可以用命令检查端口是否被其他软件占用:Windows用
netstat -ano | findstr :27017,Linux/macOS用lsof -i :27017。
4. 验证MongoDB服务本身是否可用
用MongoDB自带的命令行工具测试:
- 打开终端/命令提示符,输入
mongosh(新版本)或mongo(旧版本),如果能成功进入MongoDB shell,说明服务本身正常,此时可以检查代码细节。
顺便提下你代码里的两个小细节
虽然不是连接错误的原因,但可能影响后续操作:
- 数据库名拼写错误:
Libraby应该是Library - PyMongo的
insert()方法已被废弃,推荐使用insert_one()(插入单条数据):
collection.insert_one(book)
内容的提问来源于stack exchange,提问作者user7733881




