如何在 Python 中使用 Notion API?
off999 2025-05-02 12:52 17 浏览 0 评论
如何在Python中使用Notion API并自动编辑数据库。
设置Notion API和数据库
首先,让我们在Notion板中创建一个完整的页面数据库。 在本文中,我使用了一个来自我的一个数据库的真实示例。 数据库具有URL,Title和Published字段,并演示了如何编辑文本和日期字段:
接下来,按照官方指南创建Notion集成。 遵循此页面上的所有步骤,您将:
- 创建一个集成并获取令牌
- 与您的集成共享数据库
- 保存数据库ID
现在,我们已经准备好使用创建,读取,更新和删除功能自动化此数据库中的事物。
设置Python代码
要使用API,我们使用requests模块。 我们可以使用pip安装它:
pip install requests
像这样定义您的令牌,数据库ID和标头。
import requests
NOTION_TOKEN = "YOUR_INTEGRATION_TOKEN"
DATABASE_ID = "YOUR_DATABASE_ID"
headers = {
"Authorization": "Bearer " + NOTION_TOKEN,
"Content-Type": "application/json",
"Notion-Version": "2022-06-28",
}
在Notion数据库中创建page
要创建新页面,我们发送一个POST请求:
def create_page(data: dict):
create_url = "https://api.notion.com/v1/pages"
payload = {"parent": {"database_id": DATABASE_ID}, "properties": data}
res = requests.post(create_url, headers=headers, json=payload)
# print(res.status_code)
return res
相应的数据字段必须对应于您的表列名称。
模式可能看起来有点复杂,并且根据不同的数据类型(例如文本,日期,布尔值等)而异。 要确定确切的模式,我建议转储数据(见下一步)并检查JSON文件。
在我们的示例中,我们创建了URL,Title和Published列的数据,如下所示:
from datetime import datetime, timezone
title = "Test Title"
description = "Test Description"
published_date = datetime.now().astimezone(timezone.utc).isoformat()
data = {
"URL": {"title": [{"text": {"content": description}}]},
"Title": {"rich_text": [{"text": {"content": title}}]},
"Published": {"date": {"start": published_date, "end": None}}
}
create_page(data)
查询 Notion 数据库和读取page
要查询数据库并读取所有条目,我们可以使用以下函数。它使用分页来检索所有条目:
def get_pages(num_pages=None):
"""
如果 num_pages 为 None,则获取所有页面,否则只获取定义的数量。
"""
url = f"https://api.notion.com/v1/databases/{DATABASE_ID}/query"
get_all = num_pages is None
page_size = 100 if get_all else num_pages
payload = {"page_size": page_size}
response = requests.post(url, json=payload, headers=headers)
data = response.json()
# 将所有数据转储到文件中,将此项注释掉
# import json
# with open('db.json', 'w', encoding='utf8') as f:
# json.dump(data, f, ensure_ascii=False, indent=4)
results = data["results"]
while data["has_more"] and get_all:
payload = {"page_size": page_size, "start_cursor": data["next_cursor"]}
url = f"https://api.notion.com/v1/databases/{DATABASE_ID}/query"
response = requests.post(url, json=payload, headers=headers)
data = response.json()
results.extend(data["results"])
return results
然后,我们可以检索所有页面,遍历它们,并访问不同的字段:
pages = get_pages()
for page in pages:
page_id = page["id"]
props = page["properties"]
url = props["URL"]["title"][0]["text"]["content"]
title = props["Title"]["rich_text"][0]["text"]["content"]
published = props["Published"]["date"]["start"]
published = datetime.fromisoformat(published)
更新 Notion 数据库中的page
要更新页面,我们必须发送 PATCH 请求:
def update_page(page_id: str, data: dict):
url = f"https://api.notion.com/v1/pages/{page_id}"
payload = {"properties": data}
res = requests.patch(url, json=payload, headers=headers)
return res
例如,如果我们想要更新 Published 字段,我们发送以下数据。它与创建页面的架构相同:
page_id = "页面 ID"
new_date = datetime(2023, 1, 15).astimezone(timezone.utc).isoformat()
update_data = {"Published": {"date": {"start": new_date, "end": None}}}
update_page(page_id, update_data)
删除 Notion 数据库中的page
删除页面使用与更新页面相同的端点,但在这里,我们将 archived 参数设置为 True:
def delete_page(page_id: str):
url = f"https://api.notion.com/v1/pages/{page_id}"
payload = {"archived": True}
res = requests.patch(url, json=payload, headers=headers)
return res
结论
现在,您已经了解了如何使用Python自动化Notion数据库的创建、读取、更新和删除。这种方法可用于许多不同的应用程序,例如自动保存博客文章或创建任务清单。
跟一线大厂架构师学python
《Python Tricks》专栏是我最近在写的一本针对Python开发人员的实用编程指南,涵盖了Python中最强大和有用的特性和技巧。从基础知识入手,深入介绍函数式编程、面向对象编程、并发编程、网络编程、Web开发、数据处理和机器学习等内容。透彻解析Python语言特性,提供实践案例和示例代码,帮助您优雅解决各种问题。
如果您对python asyncio异步编程模型感兴趣,可以关注我的《python asyncio从入门到精通》专栏。
相关推荐
- 推荐一款Python的GUI可视化工具(python 可视化工具)
-
在Python基础语法学习完成后,进一步开发应用界面时,就需要涉及到GUI了,GUI全称是图形用户界面(GraphicalUserInterface,又称图形用户接口),采用图形方式显示的计算机操...
- 教你用Python绘制谷歌浏览器的3种图标
-
前两天在浏览matplotlib官方网站时,笔者无意中看到一个挺有意思的图片,就是用matplotlib制作的火狐浏览器的logo,也就是下面这个东东(网页地址是https://matplotlib....
- 小白学Python笔记:第二章 Python安装
-
Windows操作系统的python安装:Python提供Windows、Linux/UNIX、macOS及其他操作系统的安装包版本,结合自己的使用情况,此处仅记录windows操作系统的python...
- Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字
-
Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...
- 一文吃透Python虚拟环境(python虚拟环境安装和配置)
-
摘要在Python开发中,虚拟环境是一种重要的工具,用于隔离不同项目的依赖关系和环境配置。本文将基于windows平台介绍四种常用的Python虚拟环境创建工具:venv、virtualenv、pip...
- 小白也可以玩的Python爬虫库,收藏一下
-
最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...
- python环境安装+配置教程(python安装后怎么配置环境变量)
-
安装python双击以下软件:弹出一下窗口需选择一些特定的选项默认选项不需要更改,点击next勾选以上选项,点击install进度条安装完毕即可。到以下界面,证明安装成功。接下来安装库文件返回电脑桌面...
- colorama,一个超好用的 Python 库!
-
大家好,今天为大家分享一个超好用的Python库-colorama。Github地址:https://github.com/tartley/coloramaPythoncolorama库是一...
- python制作仪表盘图(python绘制仪表盘)
-
今天教大家用pyecharts画仪表盘仪表盘(Gauge)是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...
- 总结90条写Python程序的建议(python写作)
-
1.首先 建议1、理解Pythonic概念—-详见Python中的《Python之禅》 建议2、编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量、使用容易...
- [oeasy]python0137_相加运算_python之禅_import_this_显式转化
-
变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串输入单个变量没有问题但是输入两个变量之后一相加就非常离谱添加图片注释,不超过1...
- Python入门学习记录之一:变量(python中变量的规则)
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- 掌握Python的"魔法":特殊方法与属性完全指南
-
在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...
- 11个Python技巧 不Pythonic 实用大于纯粹
-
虽然Python有一套强大的设计哲学(体现在“Python之禅”中),但总有一些情况需要我们“打破规则”来解决特定问题。这触及了Python哲学中一个非常核心的理念:“实用主义胜于纯粹主义”...
- Python 从入门到精通 第三课 诗意的Python之禅
-
导言:Python之禅,英文名是TheZenOfPython。最早由TimPeters在Python邮件列表中发表,它包含了影响Python编程语言设计的20条软件编写原则。它作为复活节彩蛋...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)