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

Python调用Notion API使用requests.patch无法更新Block问题求助

问题原因

问题是请求格式不符合Notion API要求导致的,具体有两处错误:

  • 请求头缺少Content-Type: application/json声明,Notion API要求所有写入类请求的请求体必须为JSON格式,缺少该声明时服务端会直接忽略无效请求体,因此不会触发更新操作。
  • 调用requests.patch时直接将Python字典传给data参数,此时requests会默认将字典编码为表单格式,而非API需要的JSON结构,服务端无法识别更新参数,因此返回状态码200但内容无变化。

修正方案

修改请求头和传参方式即可,修正后代码如下:

import json, requests
import dotenv, os

def main():
    dotenv.load_dotenv(dotenv.find_dotenv())
    TOKEN = os.environ.get("TOKEN")
    BLOCK_ID = os.environ.get("BLOCK_ID")
    headers = {
        "Authorization": "Bearer " + TOKEN,
        "Notion-Version": "2021-08-16",
        "Content-Type": "application/json"
    }

    new_body = {
        "paragraph": {
            "text": [{
                "text": {
                    "content": "bye bye"
                }
            }]
        }
    }

    readurl = f"https://api.notion.com/v1/blocks/{BLOCK_ID}"

    # 推荐写法:使用requests自带的json参数传参,自动完成序列化和请求头适配
    res = requests.patch(readurl, headers=headers, json=new_body)
    # 你之前注释的手动序列化写法也可以正常运行
    # res = requests.request("PATCH", readurl, headers=headers, data=json.dumps(new_body))
    print(res.status_code)
    print(json.dumps(json.loads(res.text), indent=2))

if __name__ == "__main__":
    main()

修改后重新发起请求即可正常更新块的文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03