You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:22:17