Python WorkersからD1をクエリする
Python WorkerからD1をクエリする方法を学ぶ
Cloudflare Workersプラットフォームは、複数の言語をサポートしており、TypeScript、JavaScript、Rust、Pythonが含まれます。このガイドでは、Pythonを使用してD1データベースをクエリし、アプリケーションをグローバルにデプロイする方法を示します。
始める前に、次のことを確認してください:
- D1チュートリアルをTypeScriptとJavaScript用に確認し、D1データベースを作成し、Workersプロジェクトを構成する方法を学びます。
- Python言語ガイドを参照して、WorkersプラットフォームでのPythonサポートの仕組みを理解します。
- Python言語に基本的な親しみを持っていること。
Cloudflare Workersが初めての場合は、この例を続ける前に始めるガイドを最初に確認してください。
この例では、既存のD1データベースがあることを前提としています。Python Workerがデータベースをクエリできるようにするには、まずWorkerとD1データベースの間にバインディングを作成し、これをwrangler.toml構成ファイルに定義する必要があります。
D1データベースのdatabase_nameとdatabase_idが必要です。新しいデータベースを作成するか、既存のデータベースのIDを取得するために、wrangler CLIを次のように使用できます:
npx wrangler d1 create my-first-dbnpx wrangler d1 info some-existing-db# ┌───────────────────┬──────────────────────────────────────┐# │ │ c89db32e-83f4-4e62-8cd7-7c8f97659029 │# ├───────────────────┼──────────────────────────────────────┤# │ name │ db-enam │# ├───────────────────┼──────────────────────────────────────┤# │ created_at │ 2023-06-12T16:52:03.071Z │# └───────────────────┴──────────────────────────────────────┘wrangler.tomlファイルに、新しい[[d1_databases]]構成ブロックを作成し、database_nameとdatabase_idをクエリしたいD1データベースの名前とIDに設定します:
name = "python-and-d1"main = "src/entry.py"compatibility_flags = ["python_workers"] # Python Workersに必要compatibility_date = "2024-03-29"
[[d1_databases]]binding = "DB" # これがWorker内でデータベースを参照する方法になりますdatabase_name = "YOUR_DATABASE_NAME"database_id = "YOUR_DATABASE_ID"bindingの値は、Worker内からデータベースを参照する方法です。これを変更した場合は、Workerスクリプト内でも変更する必要があります。
Python Workerを作成するには、src/entry.pyに空のファイルを作成し、wrangler.tomlファイルのmainの値に一致する内容を以下に記述します:
from js import Response
async def on_fetch(request, env): # リクエスト時に他にやりたいことをここに記述!
# D1をクエリ - この例ではデータベース内のすべてのテーブルをリストします results = await env.DB.prepare("PRAGMA table_list").all() # JSONレスポンスを返す return Response.json(results)wrangler.tomlファイルのbindingの値は、Pythonコード内の変数名と正確に一致する必要があります。この例では、DBバインディングを介してデータベースを参照し、await env.DB.prepare(...)を介してこのバインディングをクエリします。
次に、Python Workerを直接デプロイできます:
npx wrangler deploy# 例の出力## あなたのWorkerは以下のバインディングにアクセスできます:# - D1データベース:# - DB: db-enam (c89db32e-83f4-4e62-8cd7-7c8f97659029)# 合計アップロード:0.18 KiB / gzip: 0.17 KiB# python-and-d1をアップロードしました (4.93秒)# python-and-d1を公開しました (0.51秒)# https://python-and-d1.YOUR_SUBDOMAIN.workers.dev# 現在のデプロイID: 80b72e19-da82-4465-83a2-c12fb11ccc72あなたのWorkerはhttps://python-and-d1.YOUR_SUBDOMAIN.workers.devで利用可能になります。
デプロイ時にエラーが発生した場合:
wrangler.tomlに有効なD1データベースのdatabase_idとdatabase_nameが構成されていることを確認してください。wrangler.tomlにcompatibility_flags = ["python_workers"]が設定されていることを確認してください。これはPythonに必要です。- エラーコードのリストを確認し、コードが未処理の例外をスローしないことを確認してください。
- Workers Pythonドキュメントを参照して、WorkersでのPythonの使用方法についてさらに学びます。
- D1クライアントAPIとD1データベースをクエリする方法を確認します。
- データをインポートする方法を学びます。