Jump to content

Drizzle

Drizzle 是一个无头的 TypeScript ORM,提供 关系型类 SQL 的查询 API。它可以处理数据库迁移和模式,并提供类型安全的数据库客户端。同时,它还附带 Drizzle-Kit,一组用于帮助查询数据库的工具。

Drizzle 客户端

Drizzle 客户端位于 src/server/db/index.ts 文件中。在此文件中,您可以定义数据库连接 URL,并将数据库模式连接到数据库对象。

src/server/db/index.ts
import { env } from "~/env";
import * as schema from "./schema";
import postgres from "postgres";

const conn = postgres(env.DATABASE_URL);

export const db = drizzle(conn, { schema });

我们建议将数据库客户端包含在 tRPC 的 Context 中:

src/server/api/trpc.ts
import { db } from "~/server/db";

export const createTRPCContext = async (opts: { headers: Headers }) => {
  const session = await auth();

  return {
    db,
    session,
    ...opts,
  };
};

模式(Schema)

Drizzle 的模式文件位于 src/server/db/schema.ts。此文件是您定义数据库模式和模型的地方,并与 Drizzle 客户端连接。

当您选择使用 NextAuth.js 配合 Prisma 时,模式文件会按照 Auth.js 文档 中的推荐值,为 UserSessionAccountVerificationToken 模型自动生成并设置。

Drizzle Kit

Drizzle Kit 是一组命令行工具,旨在帮助您管理数据库。当您选择 Drizzle 作为 ORM 时,T3 Stack 会自动包含 Drizzle Kit。

package.json
"scripts": {
    ...
    "db:generate": "drizzle-kit generate",
    "db:migrate": "drizzle-kit migrate",
    "db:push": "drizzle-kit push",
    "db:studio": "drizzle-kit studio",
    ...
  },

脚本说明

db:generate
从数据库模式生成 TypeScript 类型和模型,确保类型安全并轻松与 Drizzle ORM 集成。

db:migrate
将待处理的迁移应用到数据库中,保持模式与项目中的更改和更新同步。

db:push
将本地模式更改直接推送到数据库,而无需显式的迁移文件。这在开发中快速同步时非常有用。

db:studio
打开一个可视化界面,用于管理和检查数据库表、数据和关系。

实用资源

资源链接
Drizzle 文档https://orm.drizzle.team/docs/overview
Drizzle GitHubhttps://github.com/drizzle-team/drizzle-orm
Auth.JS Drizzle 适配器https://authjs.dev/getting-started/adapters/drizzle
Drizzle Kit 迁移指南https://orm.drizzle.team/docs/kit-overview