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 网站。