Drizzle ORM 用于 TypeScript:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
\n

Drizzle ORM 用于 TypeScript:完整指南

\n\n
\n

1. 什么是 Drizzle ORM 以及为什么需要它?

\n

Drizzle ORM 是一个现代、轻量且类型安全(type-safe)的 ORM(对象关系映射)库,专为 TypeScript 和 JavaScript 设计。与 TypeORM 或 Sequelize 等重量级 ORM 不同,Drizzle 的设计重点在于性能、可预测性以及与 TypeScript 类型系统的完全集成。它不会试图隐藏 SQL,而是提供一种方便且类型安全的方式来编写 SQL 查询,同时保持对生成代码的完全控制。

\n

Drizzle 的主要目标是让开发者摆脱编写原始 SQL 字符串和手动为查询结果进行类型定义。你在 TypeScript 代码中描述数据库模式,Drizzle 会自动为所有表、关系和查询推导出类型。这意味着与列名错误、数据类型不正确或字段缺失相关的错误将在编译阶段被发现,而不是在运行时。该库支持 PostgreSQL、MySQL、SQLite 以及其他流行的数据库。

\n

Drizzle 非常适合那些重视性能和对 SQL 控制的项目,同时希望享受 ORM 带来的便利:IDE 中的自动补全、类型检查以及声明式模式描述。它常与 Next.js、NestJS、Express 等框架配合使用。由于其轻量级(约 7KB gzipped)且没有魔法特性,Drizzle 无论是对于小型项目还是大型企业级应用都是一个绝佳的选择。

\n
\n\n
\n

2. 安装

\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:

\n
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
\n\n
\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
\n\n
\n

4. 主要方法和函数

\n

以下是 Drizzle ORM 的关键方法,附带

\n
\n

推荐