Drizzle ORM:TypeScript 原生的下一代数据库工具
Drizzle ORM: The Next-Gen TypeScript-Native Database Toolkit
| iDev Team | 2026-08-06T10:00:00
Drizzle ORM 以其零依赖、类型安全和 SQL-like 语法迅速走红。本文从设计理念到实战用法,全面解析这个 TypeScript 社区的明星 ORM。
Drizzle ORM has gained rapid popularity with its zero-dependency, type-safe, and SQL-like syntax. This article covers everything from design philosophy to practical usage of this TypeScript community star.
为什么 Drizzle 火了相比 Prisma 的声明式 Schema 和隐式查询生成,Drizzle 采用了完全不同的设计理念:SQL-like 语法:熟悉 SQL 的开发者零学习成本零运行时依赖:没有额外的查询引擎或二进制文件100% 类型安全:从 Schema 到查询结果全链路类型推断Serverless 友好:冷启动时间几乎为零Schema 定义import { 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').unique().notNull(), createdAt: timestamp('created_at').defaultNow() })查询示例// 类型完全推断 const result = await db.select() .from(users) .where(eq(users.email, 'test@example.com')) .limit(1) // 关联查询 const usersWithPosts = await db.select() .from(users) .leftJoin(posts, eq(users.id, posts.authorId)) .where(gt(posts.views, 100))Drizzle vs Prisma特性DrizzlePrisma查询语法SQL-like链式方法运行时依赖无Prisma Engine冷启动极快较慢学习曲线熟悉 SQL 即可需学习 Prisma 语法
Why Drizzle Took OffCompared to Prisma's declarative Schema and implicit query generation, Drizzle adopts a completely different design philosophy:SQL-like Syntax: Zero learning curve for developers familiar with SQLZero Runtime Dependencies: No extra query engines or binary files100% Type Safety: Full-chain type inference from Schema to query resultsServerless Friendly: Near-zero cold start timeSchema Definitionimport { 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').unique().notNull(), createdAt: timestamp('created_at').defaultNow() })Query Examples// Fully inferred types const result = await db.select() .from(users) .where(eq(users.email, 'test@example.com')) .limit(1) // Join queries const usersWithPosts = await db.select() .from(users) .leftJoin(posts, eq(users.id, posts.authorId)) .where(gt(posts.views, 100))Drizzle vs PrismaFeatureDrizzlePrismaQuery SyntaxSQL-likeChained methodsRuntime DepsNonePrisma EngineCold StartVery fastSlowerLearning CurveKnow SQL = readyPrisma-specific syntax