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

使用Python拉取Airtable记录遇问题,需用offset获取超100条数据

解决Airtable API拉取超过100条记录的分页问题

Airtable API默认单次请求最多返回100条记录,当结果总数超过100条时,响应数据里会包含offset字段,用于获取下一页的内容。你的现有代码仅发起了一次请求,因此只能拿到前100条记录。以下是修改后的完整实现,通过循环处理offset来获取所有符合条件的记录:

修改后的代码

import requests

AIRTABLE_BASE_ID = 'airtablebaseid'
AIRTABLE_API_KEY = 'airtableapikey'
AIRTABLE_TABLE_NAME = 'airtablename'
base_url = f'https://api.airtable.com/v0/{AIRTABLE_BASE_ID}/{AIRTABLE_TABLE_NAME}'
# 把筛选参数单独提取,方便后续拼接offset
filter_params = {
    'filterByFormula': 'AND(NOT({Sent to Payroll} = "Sent"),NOT({Sent to Payroll} = "Skipped"))'
}

def get_airtable_records(offset=None):
    headers = {
        "Authorization": f"Bearer {AIRTABLE_API_KEY}"
    }
    params = filter_params.copy()
    if offset:
        params['offset'] = offset
    response = requests.get(base_url, headers=headers, params=params)
    # 捕获请求错误,避免后续JSON解析失败
    response.raise_for_status()
    return response.json()

recordList = []
recordIDs = []
recordTimeStamp = []

offset = None
while True:
    data = get_airtable_records(offset)
    # 处理当前页的所有记录
    for record in data['records']:
        recordList.append(record['fields'])
        recordIDs.append(record['id'])
        recordTimeStamp.append(record['createdTime'])
        print(record)
    # 检查是否存在下一页的偏移量
    offset = data.get('offset')
    if not offset:
        break

关键修改说明

  • 重构请求函数,使其支持接收offset参数,每次请求时动态拼接分页参数
  • 使用while True循环持续请求,直到响应中不再返回offset字段(即所有记录已拉取完成)
  • 将筛选条件存入字典,避免直接拼接URL的格式问题,同时提升代码可维护性
  • 添加response.raise_for_status(),用于捕获API请求错误(如密钥无效、权限不足等)

内容的提问来源于stack exchange,提问作者Jaydee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:30:30