Cloudflare D1
Cloudflareのsqlite。
まずは、下記で準備。プロジェクト名はd1-tutorial
$ bun create cloudflare@latest d1-tutorial
wranglerでの操作
MY_DBという名前のDBを作成。
$ wrangler d1 create MY_DB
テーブルを作成してデータを挿入。
下記sqlファイルを作成。
code:schema.sql
DROP TABLE IF EXISTS Customers;
CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT);
INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name');
下記でローカル環境上でMY_DBにテーブルを作ってデータを登録できる。
$ wrangler d1 execute MY_DB --local --file=./schema.sql
データの取得。
$ wrangler d1 execute MY_DB --local --command="SELECT * FROM Customers"
Cloudflare workerからD1を利用する
下記コードを用意。
code: wrangler.toml
name = "d1-tutorial"
d1_databases
binding = "DB" # i.e. available in your Worker on env.DB
database_name = "MY_DB"
database_id = "xxxxxxxxxxxxxxxxxxxxxx"
code:index.ts
export interface Env {
DB: D1Database;
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
const { pathname} = new URL(request.url)
if (pathname === "/api/beverages") {
const { results } = await env.DB.prepare(
"SELECT * FROM Customers WHERE CompanyName = ?"
).bind("Bs Beverages")
.all();
return Response.json(results);
}
return new Response("Call /api/beverages to see everyone who works at Bs Beverages");
},
};
下記でローカルで実行。
$ wrangler dev
下記でアクセスすると
http://127.0.0.1:8787/api/beverages
下記レスポンスが返ってくる
code:json
[
{
"CustomerId": 11,
"CompanyName": "Bs Beverages",
"ContactName": "Victoria Ashworth"
},
{
"CustomerId": 13,
"CompanyName": "Bs Beverages",
"ContactName": "Random Name"
}
]