Notion APIを使って、Pythonからデータベース内のページを作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)する方法について、手順を追って解説します。この記事では、プロパティ「名前」を使用して操作するサンプルコードを掲載しています。
目次
準備
下記記事を参考に、APIでDBを操作できる環境を整えます。
Pythonの環境をセットアップします。
- 必要なライブラリをインストール
Pythonのrequestsライブラリを使ってHTTPリクエストを送信します。以下のコマンドでインストールします。
pip install requests
- APIトークンとデータベースIDを環境変数に設定
NOTION_TOKEN: Notionのインテグレーションページで取得したAPIトークンを設定。DATABASE_ID: NotionデータベースのURLから取得したデータベースIDを設定。
CRUD操作のサンプルコード
以下に、CRUD操作を行うPythonスクリプトを記述します。
共通部分です。
import requests
import os
# APIトークンとデータベースID
NOTION_TOKEN = os.environ["NOTION_TOKEN"]
DATABASE_ID = os.environ["DATABASE_ID"]
headers = {
"Authorization": f"Bearer {NOTION_TOKEN}",
"Content-Type": "application/json",
"Notion-Version": "2022-06-28",
}1. Create: データベースに新しいページを追加
新しいページを作成するcreate_page()関数です。「名前」プロパティを指定してデータベースに新規ページを追加します。
def create_page():
url = "https://api.notion.com/v1/pages"
data = {
"parent": {"database_id": DATABASE_ID},
"properties": {
"名前": {"title": [{"text": {"content": "New Page"}}]},
# 必要に応じて他のプロパティを追加
},
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Page created:", response.json())
return response.json()["id"] # ページIDを返す
else:
print(f"Error creating page: {response.status_code}, {response.text}")
return None追加のプロパティにはたとえば以下のようなものがあります。
"投稿者": {"rich_text": [{"text": {"content": name}}]},
"提出日時": {
"date": {
"start": submitted_date.isoformat(),
"end": None,
"time_zone": None,
}
},これはテキストプロパティ「投稿者」にnameを、日付プロパティ「提出日時」にDate型のsubmitted_dateを代入する想定です。
2. Read: データベース内のページを読み取るa
データベースの内容をクエリして、すべてのページを取得するquery_database()関数です。
def query_database(db_id):
url = f"https://api.notion.com/v1/databases/{db_id}/query"
response = requests.post(url, headers=headers)
if response.status_code == 200:
print("Database query result:", response.json())
else:
print(f"Error querying database: {response.status_code}, {response.text}")任意の条件でフィルタリングしたい時
任意のデータのPage IDがわかっている時
3. Update: ページのプロパティを更新
作成したページの「名前」プロパティを更新するupdate_page()関数です。特定のページIDに対してプロパティの内容を変更します。
def update_page(page_id):
url = f"https://api.notion.com/v1/pages/{page_id}"
data = {
"properties": {
"名前": {"title": [{"text": {"content": "Updated Page"}}]},
# 他のプロパティを更新する場合はここに追加
}
}
response = requests.patch(url, headers=headers, json=data)
if response.status_code == 200:
print("Page updated:", response.json())
else:
print(f"Error updating page: {response.status_code}, {response.text}")4. Delete: ページを削除(アーカイブ)
Notion APIでは「削除」はアーカイブ操作になります。delete_page()関数では、ページを非表示にする形でアーカイブしています。
def delete_page(page_id):
url = f"https://api.notion.com/v1/pages/{page_id}"
data = {"archived": True}
response = requests.patch(url, headers=headers, json=data)
if response.status_code == 200:
print("Page archived (deleted):", response.json())
else:
print(f"Error archiving (deleting) page: {response.status_code}, {response.text}")CRUD操作の実行フロー
最後に、上記の関数を使って一連のCRUD操作を実行します。
# 1. Create
page_id = create_page()
# 2. Read
if page_id:
query_database(DATABASE_ID)
# 3. Update
if page_id:
update_page(page_id)
query_database(DATABASE_ID)
# 4. Delete
if page_id:
delete_page(page_id)
query_database(DATABASE_ID)実行手順
- 上記のコードをファイル(例:
notion_crud.py)として保存します。 - 環境変数として
NOTION_TOKENとDATABASE_IDを設定します。 python notion_crud.pyでスクリプトを実行し、CRUD操作が正常に行われるか確認します。
まとめ
- Create:
create_page()で新しいページを作成。 - Read:
query_database()でデータベースの内容を取得。 - Update:
update_page()で特定のページのプロパティを更新。 - Delete:
delete_page()でページをアーカイブ(非表示)に設定。
Notion APIを使って、Pythonでデータベースを操作する方法の基本が理解できたと思います。