如何用Python应对API单次5值限制,获取全部CDETs的Severity与Status
解决API批量限制,获取所有CDET的Severity与Status数据
核心方案
把从MongoDB拿到的CDET列表按每5个一组拆分,循环调用API获取每组数据,最后合并所有结果,就能拿到全部CDET的Severity和Status了。
修改后的完整代码
import pymongo import requests # 连接MongoDB并获取所有CDET ID client = pymongo.MongoClient("mongodb://localhost:27017/") db = client["你的数据库名"] collection = db["你的集合名"] # 提取所有CDET ID,根据实际字段名调整 cdet_ids = [doc["cdet_id"] for doc in collection.find({}, {"cdet_id": 1, "_id": 0})] # 定义拆分列表的工具函数,按5个一组切分 def split_into_chunks(lst, size=5): for i in range(0, len(lst), size): yield lst[i:i+size] # 遍历分组调用API,收集所有数据 all_cdet_info = [] api_endpoint = "你的目标API地址" for chunk in split_into_chunks(cdet_ids): # 按API要求构造请求参数,参数名根据实际接口调整 req_payload = {"cdet_ids": chunk} try: resp = requests.post(api_endpoint, json=req_payload) resp.raise_for_status() # 抛出HTTP请求错误 # 把当前分组的结果加入总列表 all_cdet_info.extend(resp.json()) except requests.exceptions.RequestException as e: print(f"调用API处理分组{chunk}时出错: {e}") # 可根据需求添加重试逻辑 # 可选:把更新的数据写回MongoDB for info in all_cdet_info: collection.update_one( {"cdet_id": info["cdet_id"]}, {"$set": { "severity": info["severity"], "status": info["status"] }} ) print(f"完成!共获取{len(all_cdet_info)}条CDET的Severity和Status数据")
关键细节说明
- 列表拆分:用生成器
split_into_chunks高效切分列表,避免内存占用过高,完美适配API单次5个的限制 - 错误处理:加入异常捕获,避免单个分组请求失败导致整个流程中断,可按需添加重试机制
- 数据合并:用
extend合并每组返回结果,保证最终数据是完整的所有CDET信息 - 灵活性:代码里的数据库名、集合名、API地址、参数名都需要根据你的实际环境调整
内容的提问来源于stack exchange,提问作者adiSF
相关产品推荐
相关产品推荐

