一个用于操作从notion API获取的对象的Python库
项目描述
notion-objects
一个基于 notion-sdk-py 的Python库,它使得使用notion数据库变得容易。它提供了一个高级API,带有数据映射器,允许您定义notion数据库记录与您的Python对象之间的自定义映射。
使用notion-objects您可以
用户指南
定义模型
假设您的数据库 tasks
有四个字段,标题 Task
、日期范围 Date
、人员 Assigned to
和状态字段 Status
。您想将notion数据库查询转换为
{
"task": "my task",
"date_start": "2022-01-01",
"date_end": "2022-01-02",
"assigned_to": "Thomas",
"status": "In progress"
}
首先,声明一个包含所有必要转换的描述符的模型
from notion_objects import *
class Task(NotionObject):
task = TitleText("Task")
assigned_to = Person("Assigned to")
date_start = DateRangeStart("Date")
date_end = DateRangeEnd("Date")
closed_at = Date("Closed at")
status = Status("Status")
现在,当您查询数据库时,可以使用API调用的结果实例化 Task
对象
response = requests.post("https://api.notion.com/v1/databases/{database_id}/query", ...)
for item in response.json()['results']:
t = Task(item)
print(t.task) # access attribute values
print(t.to_json()) # prints the record in the json format show earlier
查询数据库
notion-objects在 notion-sdk-py 的周围添加了数据映射。它使用的 Database
类使用类型参数将notion对象映射到您定义的数据模型。
以下是一个代码片段,展示了如何使用我们的内置 Page
模型(它包含根页属性)迭代2022-10-08之后更新的数据库中的所有页面。
from notion_client import Client
from notion_objects import Database, Page
notion = Client(auth=os.environ['NOTION_TOKEN'])
database: Database[Page] = Database(Page, database_id="123456789abcdef1234567890abcdef1", client=notion)
result = database.query({
"filter": {
"timestamp": "last_edited_time",
"last_edited_time": {
"after": "2022-10-08"
}
}
})
for page in result:
print(page.id, page.created_time, page.last_edited_time)
如果您懒得为您的数据库创建模型,也可以使用 DynamicNotionObject
。notion-objects将尽最大努力映射数据类型。您也可以直接迭代数据库以获取所有记录
from notion_objects import Database, DynamicNotionObject
database = Database(DynamicNotionObject, ...)
for record in database:
print(record.to_json()) # will print your database record as JSON
注意并非所有类型都已实现。类型映射非常基础。
更新记录
您可以通过使用正常的Python赋值来更新数据库记录。数据映射器将正确地将类型映射到Notion的内部格式。然后,您可以调用Database.update(...)
来执行更新API调用。notion-objects将跟踪对对象所做的所有更改,并且只发送更改。
database: Database[Task] = Database(Task, ...)
task = database.find_by_id("...")
task.status = "Done"
task.closed_at = datetime.utcnow()
database.update(task)
注意并非所有属性都可以设置。
创建记录
同样,您也可以创建新页面。您可以在任何子类上使用NotionObject.new()
来创建该类型的新未管理实例。然后,调用Database.create(...)
来在数据库中创建新条目。
database: Database[Task] = Database(Task, ...)
task = Task.new()
task.task = "My New Task"
task.status = "In progress"
task.assigned_to = "6aa4d3cd-3928-4f61-9072-f74a3ebfc3ca"
task = database.create(task)
print(task.id) # will print the page ID that was created
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。