在 Bun 中使用 Drizzle ORM
Drizzle 是一個支援類 SQL “查詢建置器” API 和類 ORM 查詢 API 的 ORM。它支援內建模組 bun:sqlite。
使用 bun init 建立一個全新的專案,並安裝 Drizzle。
terminal
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({ client: sqlite });
為了檢視資料庫的實際效果,向 index.ts 新增以下程式碼。
import { db } from "./db";
import { sql } from "drizzle-orm";
const query = sql`select "hello world" as text`;
const result = db.all<{ text: string }>(query);
console.log(result);
然後使用 Bun 執行 index.ts。Bun 會建立 sqlite.db 並執行查詢。
terminal
bun run index.ts
Text
[
{
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 遷移。
terminal
bunx drizzle-kit generate --dialect sqlite --schema ./schema.ts
該命令會建立一個 drizzle 目錄,其中包含一個 .sql 遷移檔案和一個 meta 目錄。
檔案樹
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.json
使用 migrate.ts 指令碼執行這些遷移。它會連線到 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({ client: sqlite });
migrate(db, { migrationsFolder: "./drizzle" });
使用 bun 執行該指令碼以執行遷移。
terminal
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.`);
然後執行該檔案。
terminal
bun run seed.ts
Text
Seeding complete.
現在資料庫已經擁有架構和一些範例資料。將 index.ts 的內容替換為以下程式碼,使用 Drizzle 查詢資料庫。
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);
然後執行該檔案。你應該會看到剛剛插入的三部電影。
terminal
bun run index.ts
Text
[
{
id: 1,
title: "The Matrix",
releaseYear: 1999,
}, {
id: 2,
title: "The Matrix Reloaded",
releaseYear: 2003,
}, {
id: 3,
title: "The Matrix Revolutions",
releaseYear: 2003,
}
]
請參閱 Drizzle 文件。