Python调用Notion API多条件AND过滤查询验证失败求助
Notion API多条件AND过滤正确构造方法
核心问题分析
你遇到的APIResponseError本质是Filter结构不符合Notion API规范:自定义属性(如Project、Status)必须明确指定property字段,多条件组合必须嵌套在and数组中,且每个条件的结构要和属性类型严格匹配。
正确代码示例
1. 使用notion_client库的写法
from notion_client import Client import os # 初始化客户端 notion = Client(auth=os.getenv("NOTION_API_KEY")) database_id = "你的数据库UUID" # 构造多条件AND过滤 filter_config = { "and": [ # 创建时间过滤 {"created_time": {"after": "2024-01-01T00:00:00Z"}}, # Project属性(假设为Select类型) {"property": "Project", "select": {"equals": "项目A"}}, # Status属性(假设为Select类型) {"property": "Status", "select": {"equals": "进行中"}} ] } # 执行查询 try: query_result = notion.databases.query( database_id=database_id, filter=filter_config ) print("查询结果:", query_result) except Exception as e: print("错误详情:", e)
2. 使用requests库的写法
import requests import os NOTION_TOKEN = os.getenv("NOTION_API_KEY") DB_ID = "你的数据库UUID" api_url = f"https://api.notion.com/v1/databases/{DB_ID}/query" headers = { "Authorization": f"Bearer {NOTION_TOKEN}", "Content-Type": "application/json", "Notion-Version": "2022-06-28" # 必须指定兼容的API版本 } # 构造请求体中的过滤条件 request_body = { "filter": { "and": [ {"created_time": {"after": "2024-01-01T00:00:00Z"}}, {"property": "Project", "select": {"equals": "项目A"}}, {"property": "Status", "select": {"equals": "进行中"}} ] } } # 发送请求 resp = requests.post(api_url, json=request_body, headers=headers) if resp.status_code == 200: print("查询成功:", resp.json()) else: print(f"错误码:{resp.status_code},详情:{resp.json()}")
关键注意事项
- 属性类型匹配:根据数据库中属性的实际类型调整条件结构:
- 多选属性(Multi-select):
{"multi_select": {"contains": "标签值"}} - 关联属性(Relation):
{"relation": {"contains": "关联页面UUID"}} - 文本属性:
{"rich_text": {"contains": "关键词"}}
- 多选属性(Multi-select):
- 属性名称/ID:
property字段可以用属性的显示名称(大小写敏感)或属性UUID,两种方式都有效。 - API版本:必须在请求头中指定
Notion-Version,建议使用最新稳定版本(如2022-06-28),旧版本的Filter结构不兼容多条件组合。 - 时间格式:
created_time的时间值必须是ISO 8601格式(如YYYY-MM-DDTHH:MM:SSZ)。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

