MENU

初心者向け:Notion APIを使ったデータベースのCRUD操作を理解する

Notion APIを使って、Pythonからデータベース内のページを作成(Create)、読み取り(Read)、更新(Update)、削除(Delete)する方法について、手順を追って解説します。この記事では、プロパティ「名前」を使用して操作するサンプルコードを掲載しています。

目次

準備

下記記事を参考に、APIでDBを操作できる環境を整えます。

Pythonの環境をセットアップします。

  1. 必要なライブラリをインストール
    Pythonのrequestsライブラリを使ってHTTPリクエストを送信します。以下のコマンドでインストールします。
   pip install requests
  1. 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)

実行手順

  1. 上記のコードをファイル(例: notion_crud.py)として保存します。
  2. 環境変数としてNOTION_TOKENDATABASE_IDを設定します。
  3. python notion_crud.pyでスクリプトを実行し、CRUD操作が正常に行われるか確認します。

まとめ

  • Create: create_page()で新しいページを作成。
  • Read: query_database()でデータベースの内容を取得。
  • Update: update_page()で特定のページのプロパティを更新。
  • Delete: delete_page()でページをアーカイブ(非表示)に設定。

Notion APIを使って、Pythonでデータベースを操作する方法の基本が理解できたと思います。

目次