返回项目目录
开发工具精选项目

Drizzle ORM

轻量、类型安全且贴近 SQL 的 TypeScript ORM,原生连接主流数据库驱动,并配套迁移工具。

主要语言TypeScript
开源许可Apache-2.0
项目类型开发工具
维护状态活跃维护
OVERVIEW

项目概述

Drizzle ORM 允许开发者使用 TypeScript 声明数据库 Schema,并通过 SQL-like 或关系查询 API 访问数据。它支持 PostgreSQL、MySQL、SQLite、SingleStore、MSSQL 和 CockroachDB 等 SQL 数据库,适配 Node.js、Bun、Deno、Cloudflare Workers 及多种 Serverless 驱动。

Drizzle ORM 是一层贴近 SQL 的 TypeScript 数据访问库。开发者以 TypeScript 声明表、列、索引和约束,查询既可以使用类似 SQL 的 Select、Join、Where API,也可以使用带嵌套关系的 Relational Queries。它不会要求应用围绕专用数据框架组织,而是直接运行在 PostgreSQL、MySQL、SQLite、SingleStore、MSSQL、CockroachDB 等数据库的标准或平台驱动之上。核心 ORM 没有直接运行时依赖,适用于 Node.js、Bun、Deno、Cloudflare Workers、Serverless Function、Expo 和 React Native 等环境。配套的开源 Drizzle Kit 负责生成、执行、拉取和检查迁移;Drizzle Studio 可以浏览和编辑数据,但 Studio 本身不是开源项目。当前 npm 稳定版为 0.45.2,1.0 系列仍处于 RC 阶段。

稳定版本drizzle-orm 0.45.2
数据库PostgreSQL / MySQL / SQLite / SingleStore / MSSQL / CockroachDB
许可证Apache-2.0
FEATURES

主要特点

Drizzle 将类型安全放在 SQL 语义之上,并把迁移、数据库浏览和不同运行时适配拆成可选工具。

01

TypeScript Schema

使用 `pgTable`、`mysqlTable`、`sqliteTable` 等 API 声明列、默认值、主键、外键、索引与约束,并从同一份定义推导查询类型。

02

SQL-like 查询 API

Select、Insert、Update、Delete、Join、Where、Group By 等操作保持接近 SQL 的结构,熟悉 SQL 的开发者无需重新学习一套完全不同的查询语言。

03

Relational Queries

可以按关系加载嵌套数据并选择列、筛选和排序,适合处理常见的一对一、一对多和多对多读取。

04

完整 SQL Escape Hatch

`sql` 模板允许组合数据库函数、表达式、子查询和暂未封装的特性,同时保留参数绑定能力。

05

原生数据库驱动

直接使用 postgres.js、node-postgres、mysql2、better-sqlite3、Bun SQL、Cloudflare D1、Neon、libSQL 等驱动,不强制引入数据代理。

06

多数据库方言

覆盖 PostgreSQL、MySQL、SQLite、SingleStore、MSSQL 和 CockroachDB,并为各方言暴露专属列类型与能力。

07

Serverless-ready

支持 Node.js、Bun、Deno、Cloudflare Workers、Supabase Functions、Vercel Functions、Edge Runtime、Expo 和 React Native 等环境。

08

零直接运行时依赖

核心包保持轻量,数据库驱动作为可选 Peer Dependency 按项目选择,减少不相关代码和运行时组件。

09

Drizzle Kit 迁移工具

提供 `generate`、`migrate`、`push`、`pull`、`check`、`up`、`export` 和 `studio` 等命令。

10

Code-first 与 Database-first

既可从 TypeScript Schema 生成 SQL 迁移,也可反向读取现有数据库并生成 Drizzle Schema。

11

可审查的 SQL 迁移

生成的迁移以普通 `.sql` 文件进入版本控制,团队可以在部署前查看 DDL、补充数据迁移并走代码审查。

12

事务与 Savepoint

提供类型化事务 API,并支持嵌套事务的 Savepoint,便于组织多步骤写入和局部回滚。

13

Prepared Statements

可准备并复用参数化查询,减少重复解析开销,并为高频服务端请求提供稳定执行路径。

14

Drizzle Studio

通过本地代理在浏览器中查看、筛选和编辑数据库内容;ORM 与 Kit 开源,但 Studio 产品本身不开放源码。

USE CASES

适用场景

它适合熟悉 SQL、希望保留底层查询控制,同时需要 TypeScript 推导和 Serverless 运行能力的团队。

TypeScript API 服务

在 Node.js、Hono、Fastify、NestJS 或其他服务端框架中获得数据库 Schema、查询结果和写入参数的类型推导。

Serverless 与 Edge 应用

通过 Cloudflare D1、Neon HTTP/WebSocket、Turso/libSQL、PlanetScale 等平台驱动连接数据库,避免传统长连接假设。

Next.js 与全栈框架

在 Server Component、Route Handler、Server Action 或服务端 Loader 中使用静态类型的 SQL 查询。

现有 SQL 数据库渐进接入

使用 `drizzle-kit pull` 内省已有 Schema,再逐步将手写 SQL 或旧数据层迁移到类型化查询。

多运行时共享数据层

在 Node.js、Bun、Deno 和 Workers 项目中复用 Schema 与查询模式,同时为各部署环境选择合适驱动。

需要 SQL 控制力的复杂业务

保留 Join、CTE、聚合、窗口函数、数据库扩展和原始 SQL 表达式,而不被高层模型 API 限制。

移动端本地 SQLite

通过 Expo SQLite 或 OP-SQLite 在 Expo、React Native 中建立类型安全的离线本地数据层。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Drizzle ORM 擅长的地方

  • 查询结构贴近 SQL,已有 SQL 知识可以直接迁移,生成语句也较容易推断。
  • Schema、查询参数和结果类型来自 TypeScript,不需要为常规查询额外生成 Client。
  • 核心层轻量且没有直接运行时依赖,适合冷启动和受限的 Serverless 环境。
  • 直接使用数据库或平台原生驱动,不要求额外数据代理。
  • SQL-like 与 Relational Queries 并存,可按查询复杂度选择抽象层。
  • 迁移是可读、可审查、可版本控制的 SQL 文件,便于数据库变更治理。
  • 支持主流 SQL 方言、传统服务端、Edge、移动端和浏览器数据库场景。
  • Drizzle Kit、Studio、Seed 和大量官方指南形成较完整的开发体验。
  • Apache-2.0 许可证适合个人、商业和企业内部项目。

需要注意

采用前应考虑的问题

仍然需要理解 SQL 和数据库

Drizzle 保留 SQL 语义,不会替你决定索引、Join、锁、隔离级别和查询计划;复杂业务仍需数据库知识。

稳定版仍是 0.x

当前稳定版为 0.45.2,1.0 仍处于 RC。不要把 RC 文档或示例直接套用到稳定版,升级前应核对变更说明。

需要单独选择和安装驱动

Drizzle 不自带数据库连接层;postgres.js、pg、mysql2、better-sqlite3、D1 等驱动的连接、池化与部署限制各不相同。

方言和驱动能力并不完全一致

Returning、事务、批处理、迁移 DDL、流式查询和数据类型支持会因数据库与驱动而异,不能假设所有示例跨方言等价。

关系定义与数据库外键要分别确认

应用层 Relations 用于关系查询,数据库 Foreign Key 用于完整性约束;只定义其中一种不会自动获得另一种保障。

push 不应替代生产迁移审查

`drizzle-kit push` 适合原型和受控环境;成熟生产系统应生成 SQL、审查锁表与数据影响,再由部署流程执行迁移。

自动迁移无法理解所有业务意图

重命名、拆表、回填数据、约束收紧和大表变更仍可能需要人工选择或自定义 SQL 迁移。

原始 SQL 必须保持参数化

`sql` 模板会处理参数,但 `sql.raw`、动态标识符和手工拼接仍可能引入注入风险,外部输入不能直接进入 SQL 结构。

至少升级到已修复版本

0.45.2 修复了 `sql.identifier()` 与 `sql.as()` 的转义问题。仍使用更早稳定版的项目应优先评估升级并检查相关查询。

类型复杂度可能影响编辑器

超大 Schema、深层关系和复杂条件类型可能增加 TypeScript 检查时间,应拆分 Schema、限制查询选择范围并关注升级回归。

Serverless 连接策略仍由平台决定

ORM 轻量不代表任意 TCP 驱动都适合 Edge。应根据平台选择 HTTP、WebSocket、D1 Binding 或连接池方案。

Drizzle Studio 不是开源组件

Drizzle ORM 与 Drizzle Kit 是开源项目,但 Studio 不开源;严格自托管或审计要求下应另选数据库管理工具。

不支持文档型数据库

Drizzle 面向 SQL 数据库;MongoDB 等文档数据库需要使用相应官方 Driver 或其他 ORM。

QUICK START

快速开始

下面以 PostgreSQL 和 postgres.js 为例,完成依赖安装、Schema、连接、查询、迁移与事务。

1安装 ORM、PostgreSQL 驱动和迁移工具
bash
npm install drizzle-orm postgres
npm install --save-dev drizzle-kit
2定义 PostgreSQL Schema
typescript
import {
  integer,
  pgTable,
  serial,
  text,
  timestamp,
} from "drizzle-orm/pg-core";

export const users = pgTable("users", {
  id: serial("id").primaryKey(),
  name: text("name").notNull(),
  email: text("email").notNull().unique(),
  age: integer("age"),
  createdAt: timestamp("created_at", { withTimezone: true })
    .defaultNow()
    .notNull(),
});
3创建连接并执行类型安全查询
typescript
import { desc, eq } from "drizzle-orm";
import { drizzle } from "drizzle-orm/postgres-js";
import postgres from "postgres";
import { users } from "./schema";

const client = postgres(process.env.DATABASE_URL!);
export const db = drizzle({ client });

const inserted = await db
  .insert(users)
  .values({ name: "Ada", email: "ada@example.com", age: 36 })
  .returning();

const adults = await db
  .select({ id: users.id, name: users.name })
  .from(users)
  .where(eq(users.age, 36))
  .orderBy(desc(users.createdAt));
4配置 Drizzle Kit
typescript
import "dotenv/config";
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  dialect: "postgresql",
  schema: "./src/schema.ts",
  out: "./drizzle",
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});
5生成、检查并执行迁移
bash
npx drizzle-kit generate

# 先审查 drizzle/*.sql,再检查迁移冲突
npx drizzle-kit check
npx drizzle-kit migrate
6使用事务与 Savepoint
typescript
await db.transaction(async (tx) => {
  const [user] = await tx
    .insert(users)
    .values({ name: "Grace", email: "grace@example.com" })
    .returning();

  await tx.transaction(async (savepoint) => {
    await savepoint
      .update(users)
      .set({ age: 37 })
      .where(eq(users.id, user.id));
  });
});
7启动本地数据浏览器
bash
npx drizzle-kit studio
8执行发布前检查
bash
npm run lint
npm run typecheck
npm run test
npm run build

# 在预发布数据库演练迁移、回滚方案、连接池和慢查询

下一步:正式项目应固定稳定版和数据库驱动版本,先决定 Code-first、Database-first 或混合迁移流程,并在上线前审查 Drizzle Kit 生成的 SQL;不要在生产环境无审核地直接执行 push。

ALTERNATIVES

类似项目

这些项目覆盖 Drizzle 常见的 JavaScript 运行时、Serverless 平台和托管 PostgreSQL 场景;外部项目则代表不同抽象程度的 TypeScript 数据访问方案。

COMPARISON

Drizzle ORM vs Prisma ORM

Drizzle ORM 与 Prisma ORM 都为 TypeScript 应用提供类型安全的数据访问和迁移工具,但前者强调贴近 SQL、原生驱动与轻量运行时,后者强调独立 Schema、生成式 Client 和更高层的数据模型体验。

比较维度Drizzle ORMPrisma ORM
核心定位贴近 SQL 的轻量 TypeScript ORM围绕数据模型与生成式 Client 的数据平台
Schema 定义使用 TypeScript API 定义表、列与约束使用独立的 Prisma Schema Language
查询风格SQL-like Builder 与 Relational Queries 并存面向模型的 Prisma Client API
类型生成主要从 TypeScript Schema 直接推导,无需常规 Client Codegen根据 Prisma Schema 生成专用 Client 与类型
数据库连接直接使用标准或平台原生驱动通过 Prisma Client、Adapter 或平台连接方案访问数据库
SQL 控制Join、CTE、表达式和 SQL 模板接近原生 SQL常规 CRUD 抽象更高,复杂场景可使用 TypedSQL 或 Raw Query
迁移Drizzle Kit 生成并执行可审查 SQL,也支持 pull 与 pushPrisma Migrate 围绕 Prisma Schema 管理迁移历史
数据库范围专注 PostgreSQL、MySQL、SQLite 等 SQL 数据库除主流 SQL 数据库外还支持 MongoDB
Serverless核心轻量,针对 D1、Neon、libSQL 等提供专属入口具备 Serverless/Edge 支持,并提供 Adapter 与托管数据产品
抽象取舍需理解 SQL 与驱动差异,控制力更直接CRUD 与关系开发更统一,但需学习 Prisma 模型和工具链
版本成熟度稳定版仍为 0.45.2,1.0 处于 RC已进入多个稳定大版本,生态和企业采用历史更长
更适合重视 SQL 控制、轻量运行时和多 Serverless 驱动偏好统一模型 API、Codegen 和完整数据平台体验
如何选择

如果团队熟悉 SQL,希望查询结构透明、直接使用平台驱动,并在 Edge 或 Serverless 中保持轻量,优先考虑 Drizzle ORM;如果团队更重视统一的数据模型、生成式 Client、MongoDB 支持和成熟的一体化工具链,Prisma ORM 往往更合适。正式选型应使用真实 Schema、查询和部署环境做迁移与性能验证。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 29 日
核验版本drizzle-orm 0.45.2 / drizzle-kit 0.31.10
内容维护Drizzle Team / drizzle-team
项目维护状态活跃维护

npm 官方元数据核验的稳定版为 drizzle-orm 0.45.2、drizzle-kit 0.31.10;GitHub Releases 同时提供 1.0.0 RC 预发布版本。0.45.2 修复了动态 SQL 标识符转义问题。官方仓库未归档,最近可见提交日期为 2026 年 7 月 23 日。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 23 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 23 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库