Drizzle 是一個 ORM,它同時支援類似 SQL 的「查詢建構器」API 和類似 ORM 的 查詢 API。它支援內建模組 bun:sqlite
。
讓我們透過 bun init
建立一個新的專案,並安裝 Drizzle,來開始吧。
bun init -y
bun add drizzle-orm
bun add -D drizzle-kit
接著,我們將使用 bun:sqlite
模組連線到 SQLite 資料庫,並建立 Drizzle 資料庫執行個體。
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
export const db = drizzle(sqlite);
若要查看資料庫的實際運作,請將這些程式碼行加入 index.ts
。
import { db } from "./db";
import { sql } from "drizzle-orm";
const query = sql`select "hello world" as text`;
const result = db.get<{ text: string }>(query);
console.log(result);
接著,使用 Bun 執行 index.ts
。Bun 會自動建立 sqlite.db
並執行查詢。
bun run index.ts
{
text: "hello world"
}
讓我們為資料庫提供適當的架構。建立一個 schema.ts
檔案,並定義一個 movies
表格。
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
export const movies = sqliteTable("movies", {
id: integer("id").primaryKey(),
title: text("name"),
releaseYear: integer("release_year"),
});
我們可以使用 drizzle-kit
CLI 來產生一個初始的 SQL 遷移。
bunx drizzle-kit generate:sqlite --schema ./schema.ts
這會建立一個新的 drizzle
目錄,其中包含一個 .sql
遷移檔案和 meta
目錄。
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.json
我們可以使用一個簡單的 migrate.ts
腳本來執行這些遷移。
這個腳本會建立一個新的連線到 SQLite 資料庫,該資料庫會寫入 sqlite.db
,然後執行 drizzle
目錄中所有未執行的遷移。
import { migrate } from "drizzle-orm/bun-sqlite/migrator";
import { drizzle } from "drizzle-orm/bun-sqlite";
import { Database } from "bun:sqlite";
const sqlite = new Database("sqlite.db");
const db = drizzle(sqlite);
await migrate(db, { migrationsFolder: "./drizzle" });
我們可以使用 bun
執行這個腳本,來執行遷移。
bun run migrate.ts
現在我們有了資料庫,讓我們加入一些資料。建立一個 seed.ts
檔案,並輸入以下內容。
import { db } from "./db";
import * as schema from "./schema";
await db.insert(schema.movies).values([
{
title: "The Matrix",
releaseYear: 1999,
},
{
title: "The Matrix Reloaded",
releaseYear: 2003,
},
{
title: "The Matrix Revolutions",
releaseYear: 2003,
},
]);
console.log(`Seeding complete.`);
接著,執行這個檔案。
bun run seed.ts
Seeding complete.
我們終於有了一個具有架構和一些範例資料的資料庫。讓我們使用 Drizzle 來查詢它。將 index.ts
的內容替換為以下內容。
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);
接著,執行這個檔案。你應該會看到我們插入的三部電影。
bun run index.ts
bun run index.ts
[
{
id: 1,
title: "The Matrix",
releaseYear: 1999
}, {
id: 2,
title: "The Matrix Reloaded",
releaseYear: 2003
}, {
id: 3,
title: "The Matrix Revolutions",
releaseYear: 2003
}
]
請參閱 Drizzle 網站,以取得完整的文件。