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

Python调用Airtable API无法获取全部超100条记录问题排查

问题排查:Airtable API无法获取全部记录的原因及修复

核心问题分析

你的get_all_advances函数无法拉取全量记录,根源在两点:

  • 未做记录累加:每次循环只处理当前请求返回的records,完全没把之前批次的记录存下来,最后只会返回某一批次的记录,不是全部。
  • 冗余的JSON操作:json.loads(json.dumps(rsp))纯粹多余,get_all和get_all_w_offset已经返回了解析好的字典,重复序列化反序列化毫无意义。

修复后的完整代码

def get_all_advances():
    # 初始化总记录列表
    all_records = []
    # 第一次请求,不带offset
    rsp = get_all(REGISTRE_TBL)
    # 把第一批记录加入总列表
    all_records.extend(rsp.get("records", []))
    # 获取offset,用于后续请求
    offset = rsp.get("offset")
    
    # 循环拉取剩余数据,直到没有offset
    while offset:
        rsp = get_all_w_offset(REGISTRE_TBL, offset)
        all_records.extend(rsp.get("records", []))
        # 更新offset,如果没有则退出循环
        offset = rsp.get("offset")
    
    return all_records

修复细节说明

  1. 新增all_records列表专门存储所有批次的记录,每次请求后用extend把新记录追加进去,确保不丢失之前的数据。
  2. 删掉了完全没必要的JSON序列化反序列化步骤,直接用接口返回的字典即可。
  3. 调整了循环逻辑:先处理第一次请求的记录,再根据offset循环拉取剩余数据,保证所有记录都被收集。

额外优化建议

可以把两个请求函数合并成一个,减少代码重复:

def get_airtable_records(table, offset=None):
    url = f"{endpoint}/{table}"
    params = {"offset": offset} if offset else {}
    r = requests.get(url=url, headers=headers, params=params)
    return r.json()

之后get_all_advances可以简化成更简洁的版本:

def get_all_advances():
    all_records = []
    offset = None
    while True:
        rsp = get_airtable_records(REGISTRE_TBL, offset)
        all_records.extend(rsp.get("records", []))
        offset = rsp.get("offset")
        if not offset:
            break
    return all_records

内容的提问来源于stack exchange,提问作者Kaiss B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:15:42