使用requests库连接MongoDB报错:找不到连接适配器
问题原因与解决方法
核心错误原因
requests 库仅支持 HTTP/HTTPS 协议,而你用的 mongodb+srv:// 是 MongoDB 专用的连接协议,requests 无法识别这个协议,所以抛出「No connection adapters were found」错误——这和你是否建立 Session 无关,本质是协议不兼容。
解决方案:使用 MongoDB Atlas Data API(仅用 requests 即可实现)
如果你用的是 MongoDB Atlas 集群,官方提供了基于 HTTPS 的 Data API,刚好符合你只能用 requests 的限制。步骤如下:
1. 开启并配置 Data API
- 登录 MongoDB Atlas 控制台,找到你的集群,进入「Data API」选项卡
- 启用 Data API,生成并保存你的 App ID 和 API Key
- 确保 API Key 拥有对目标数据库/集合的写入权限
2. 修改代码适配 Data API
需要调整请求 URL、请求头和请求体格式:
import requests import pandas as pd data = [10,20,30,40,50,60] df = pd.DataFrame(data, columns=['Numbers']) # 转换DataFrame为MongoDB接受的文档列表(每条对应一行数据) documents = df.to_dict('records') # Data API配置信息 APP_ID = "你的Atlas Data API App ID" API_KEY = "你的Atlas Data API密钥" URL = f"https://data.mongodb-api.com/app/{APP_ID}/endpoint/data/v1/action/insertMany" # 请求头:指定内容类型和API密钥 headers = { "Content-Type": "application/json", "api-key": API_KEY } # 请求体:符合Data API的格式要求 payload = { "collection": "collection_name", "database": "db_name", "dataSource": "你的集群名称(即Atlas里的Cluster名)", "documents": documents } # 发送POST请求 response = requests.post(URL, json=payload) # 验证结果 print(response.json())
关键细节说明
- 用
df.to_dict('records')把DataFrame转成[{"Numbers":10}, {"Numbers":20}, ...]的格式,这是MongoDB批量插入需要的文档结构,而非默认的列键结构 - Data API的URL必须是HTTPS协议,请求头里必须携带API密钥才能通过身份验证
dataSource是你Atlas集群的名称(比如Cluster0),不是连接字符串里的域名段
内容的提问来源于stack exchange,提问作者Benjamin Brannon
相关产品推荐
相关产品推荐

