Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

データベースのクエリ

最終更新 Markdown で表示Agent セットアップ

D1 は SQLite のクエリエンジンを使うため、SQLite の SQL 規約のほとんどに対応しています。SQL コマンドで D1 をクエリできます。

D1 データベースとのやり取りには、次の方法があります。

  1. コード内の D1 Workers Binding API
  2. D1 REST API
  3. D1 Wrangler コマンド

SQL で D1 をクエリする

D1 は SQLite のセマンティクスを理解します。Workers Binding API または REST API(Wrangler コマンドを含む)から、SQL 文でデータベースをクエリできます。対応する SQL 文の詳細は D1 SQL API を参照してください。

外部キー関係を使う

D1 で SQL を使うとき、データベース内のテーブル間で外部キー制約を定義し、強制できます。外部キー制約でテーブル間の関係を強制したり、ほかのテーブルの行を参照している行の削除を防いだりできます。外部キー関係の例を次に示します。

CREATE TABLE users (
    user_id INTEGER PRIMARY KEY,
    email_address TEXT,
    name TEXT,
    metadata TEXT
)

CREATE TABLE orders (
    order_id INTEGER PRIMARY KEY,
    status INTEGER,
    item_desc TEXT,
    shipped_date INTEGER,
    user_who_ordered INTEGER,
    FOREIGN KEY(user_who_ordered) REFERENCES users(user_id)
)

詳細は 外部キーの定義 を参照してください。

JSON のクエリ

D1 では、データベースに保存した JSON データをクエリし、解析できます。たとえば、JSON オブジェクト内の値を取り出せます。

sensor_reading 列にある次の JSON オブジェクト(type:blob)から、値を直接取り出せます。

{
    "measurement": {
        "temp_f": "77.4",
        "aqi": [21, 42, 58],
        "o3": [18, 500],
        "wind_mph": "13",
        "location": "US-NY"
    }
}
-- Extract the temperature value
SELECT json_extract(sensor_reading, '$.measurement.temp_f')-- returns "77.4" as TEXT

JSON オブジェクトのクエリについて詳しくは JSON のクエリ を参照してください。

Workers Binding API で D1 をクエリする

Workers Binding API は主にデータプレーンとやり取りし、Worker から D1 データベースをクエリできます。

次の作業が必要です。

  1. D1 データベースを Worker にバインドします。
  2. ステートメントを準備します。
  3. ステートメントを実行します。
index.jsjs
export default {
    async fetch(request, env) {
        const {pathname} = new URL(request.url);
        const companyName1 = `Bs Beverages`;
        const companyName2 = `Around the Horn`;
        const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`);

        if (pathname === `/RUN`) {
            const returnValue = await stmt.bind(companyName1).run();
            return Response.json(returnValue);
        }

        return new Response(
            `Welcome to the D1 API Playground!
						\nChange the URL to test the various methods inside your index.js file.`,
        );
    },
};

詳細は Workers Binding API を参照してください。

REST API で D1 をクエリする

REST API は主にコントロールプレーンとやり取りし、D1 データベースの作成と管理ができます。

D1 REST API のドキュメントは D1 REST API を参照してください。

Wrangler コマンドで D1 をクエリする

Wrangler コマンドで D1 データベースをクエリできます。Wrangler コマンドは、操作に REST API を使います。

npx wrangler d1 execute prod-d1-tutorial --command="SELECT * FROM Customers"
🌀 Mapping SQL input into an array of statements
🌀 Executing on local database production-db-backend (<DATABASE_ID>) from .wrangler/state/v3/d1:
┌────────────┬─────────────────────┬───────────────────┐
 CustomerId CompanyName ContactName
├────────────┼─────────────────────┼───────────────────┤
 1 Alfreds Futterkiste Maria Anders
├────────────┼─────────────────────┼───────────────────┤
 4 Around the Horn Thomas Hardy
├────────────┼─────────────────────┼───────────────────┤
 11 Bs Beverages Victoria Ashworth
├────────────┼─────────────────────┼───────────────────┤
 13 Bs Beverages Random Name
└────────────┴─────────────────────┴───────────────────┘

役に立ちましたか?