Drizzle ORM 用于 TypeScript:完整指南
\n\n1. 什么是 Drizzle ORM 以及为什么需要它?
\nDrizzle ORM 是一个现代、轻量且类型安全(type-safe)的 ORM(对象关系映射)库,专为 TypeScript 和 JavaScript 设计。与 TypeORM 或 Sequelize 等重量级 ORM 不同,Drizzle 的设计重点在于性能、可预测性以及与 TypeScript 类型系统的完全集成。它不会试图隐藏 SQL,而是提供一种方便且类型安全的方式来编写 SQL 查询,同时保持对生成代码的完全控制。
\nDrizzle 的主要目标是让开发者摆脱编写原始 SQL 字符串和手动为查询结果进行类型定义。你在 TypeScript 代码中描述数据库模式,Drizzle 会自动为所有表、关系和查询推导出类型。这意味着与列名错误、数据类型不正确或字段缺失相关的错误将在编译阶段被发现,而不是在运行时。该库支持 PostgreSQL、MySQL、SQLite 以及其他流行的数据库。
\nDrizzle 非常适合那些重视性能和对 SQL 控制的项目,同时希望享受 ORM 带来的便利:IDE 中的自动补全、类型检查以及声明式模式描述。它常与 Next.js、NestJS、Express 等框架配合使用。由于其轻量级(约 7KB gzipped)且没有魔法特性,Drizzle 无论是对于小型项目还是大型企业级应用都是一个绝佳的选择。
\n2. 安装
\n通过 npm 或 yarn 安装 Drizzle ORM 及其 CLI 工具(Drizzle Kit)。驱动器的选择取决于所使用的数据库。
\n# 对于 PostgreSQL\nnpm install drizzle-orm pg\nnpm install -D drizzle-kit @types/pg\n\n# 对于 MySQL\nnpm install drizzle-orm mysql2\nnpm install -D drizzle-kit @types/node\n\n# 对于 SQLite\nnpm install drizzle-orm better-sqlite3\nnpm install -D drizzle-kit @types/better-sqlite3\n 安装后,需要为 Drizzle Kit 创建一个配置文件 drizzle.config.ts:
import type { Config } from "drizzle-kit";\n\nexport default {\n schema: "./src/db/schema.ts",\n out: "./drizzle",\n dialect: "postgresql", // 或 "mysql", "sqlite"\n dbCredentials: {\n url: process.env.DATABASE_URL!,\n },\n} satisfies Config;\n 3. 快速入门
\n一个适用于 PostgreSQL 的最小工作示例。首先定义模式,然后创建连接并执行查询。
\n// src/db/schema.ts\nimport { pgTable, serial, text, integer } from "drizzle-orm/pg-core";\n\nexport const users = pgTable("users", {\n id: serial("id").primaryKey(),\n name: text("name").notNull(),\n age: integer("age"),\n});\n\n// src/index.ts\nimport { drizzle } from "drizzle-orm/node-postgres";\nimport { Pool } from "pg";\nimport { users } from "./db/schema";\nimport { eq } from "drizzle-orm";\n\nconst pool = new Pool({\n connectionString: process.env.DATABASE_URL,\n});\n\nconst db = drizzle(pool);\n\nasync function main() {\n // 插入数据\n const newUser = await db.insert(users).values({\n name: "Alice",\n age: 30,\n }).returning();\n console.log("Created user:", newUser);\n\n // 查询数据\n const allUsers = await db.select().from(users);\n console.log("All users:", allUsers);\n\n // 带条件的查询\n const user = await db.select()\n .from(users)\n .where(eq(users.name, "Alice"));\n console.log("Found user:", user);\n}\n\nmain().catch(console.error);\n 4. 主要方法和函数
\n以下是 Drizzle ORM 的关键方法,附带
\n