Drizzle 是一個 ORM,支持類似 SQL 的"查詢構建器"API 和類似 ORM 的 Queries API。它支持 bun:sqlite 內置模塊。
讓我們開始,使用 bun init 創建一個新項目並安裝 Drizzle。
sh
bun init -y
bun add drizzle-orm
bun add -D drizzle-kit然後我們將使用 bun:sqlite 模塊連接到 SQLite 數據庫並創建 Drizzle 數據庫實例。
ts
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。
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 並執行查詢。
sh
bun run index.tstxt
{
text: "hello world"
}讓我們給數據庫一個合適的模式。創建一個 schema.ts 文件並定義一個 movies 表。
ts
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 遷移。
sh
bunx drizzle-kit generate --dialect sqlite --schema ./schema.ts這將創建一個新的 drizzle 目錄,其中包含一個 .sql 遷移文件和 meta 目錄。
txt
drizzle
├── 0000_ordinary_beyonder.sql
└── meta
├── 0000_snapshot.json
└── _journal.json我們可以使用一個簡單的 migrate.ts 腳本來執行這些遷移。
此腳本創建一個到 SQLite 數據庫的新連接(寫入 sqlite.db),然後執行 drizzle 目錄中所有未執行的遷移。
ts
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);
migrate(db, { migrationsFolder: "./drizzle" });我們可以使用 bun 運行此腳本來執行遷移。
sh
bun run migrate.ts現在我們有了數據庫,讓我們添加一些數據。創建一個 seed.ts 文件,內容如下。
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.`);然後運行此文件。
sh
bun run seed.tstxt
Seeding complete.我們終於有了一個帶有模式和示例數據的數據庫。讓我們使用 Drizzle 查詢它。將 index.ts 的內容替換為以下內容。
ts
import * as schema from "./schema";
import { db } from "./db";
const result = await db.select().from(schema.movies);
console.log(result);然後運行文件。你應該會看到我們插入的三部電影。
sh
bun run index.tstxt
[
{
id: 1,
title: "The Matrix",
releaseYear: 1999
}, {
id: 2,
title: "The Matrix Reloaded",
releaseYear: 2003
}, {
id: 3,
title: "The Matrix Revolutions",
releaseYear: 2003
}
]請參閱 Drizzle 網站 獲取完整文檔。