如何通过Notion API批量更新数据库中的多条条目?
Notion API批量更新页面属性问题解答
问题
我通过以下Python代码调用Notion API查询数据库:
url = f"https://api.notion.com/v1/databases/{NotionDB}/query" payload = {"page_size": 200} headers = { "Authorization": NotionKEY, "accept": "application/json", "Notion-Version": "2022-06-28", "content-type": "application/json" } response = requests.post(url, json=payload, headers=headers) data = json.loads(response.text)
返回的data['results']是一个包含多个page对象的列表,结构大致如下:
[ {'object': 'page', 'id': 'ABC', 'parent': {'type': 'database_id', 'database_id': 'XXXXX'}, 'archived': False, 'properties': {'Prop 1': {'id': '%40QKL', ...}}, 'url': 'https://www.notion.so/XYZ'}, {'object': 'page', 'id': 'CDE', 'parent': {'type': 'database_id', 'database_id': 'XXXXX'}, 'archived': False, 'properties': {'Prop 1': {'id': '%40QKL', ...}}, 'url': 'https://www.notion.so/ABCD'}, # 更多page对象... ]
我的目标是修改这些page对象的属性后更新数据库,目前只能通过循环逐个调用API更新:
url = "https://api.notion.com/v1/pages/ID-OF-i_th-PAGE" payload = {"properties": data['results'][i]['properties']} headers = { "Authorization": NotionKEY, "accept": "application/json", "Notion-Version": "2022-06-28", "content-type": "application/json" } response = requests.patch(url, json=payload, headers=headers)
这种方式可行,但如果有N条数据就要调用N次API。请问有没有办法通过单次调用直接更新数据库中的多条条目属性?
回答
Notion官方API目前不支持单次调用批量更新多条页面的属性,必须针对每个页面单独发起PATCH /v1/pages/{page_id}请求。
不过可以通过以下方式优化批量更新的效率:
- 使用异步请求:借助
aiohttp这类异步HTTP库,同时发起多个请求(注意不要超过Notion的API限额),减少总等待时间。 - 添加合理延时:如果更新的页面数量较多,在循环中加入短延时(比如0.5秒),避免触发API的速率限制。
- 提前检查API限额:Notion API免费版限额为每分钟最多3次请求,付费版有更高限额,批量更新前确认当前剩余限额,避免请求被拒绝。
内容的提问来源于stack exchange,提问作者Massagran
相关产品推荐
相关产品推荐

