mcpField
D
drizzle-orm

drizzle-orm

github.com/pedronauck数据与数据库647269 次安装1 周前更新
代码仓库

关于 drizzle-orm

为项目中的 Drizzle ORM 开发提供指南、模式和最佳实践,面向使用 TypeScript 与 Drizzle 的开发者。内容涵盖类型推断、查询、事务和迁移流程。

主要功能

  1. 01按领域组织数据库模式
  2. 02导出查询与插入类型
  3. 03为重复查询使用预处理语句
  4. 04用事务维护多步操作一致性
  5. 05通过项目脚本管理迁移

适用场景

  1. 01定义带约束和索引的表
  2. 02编写重复执行的数据库查询
  3. 03实现跨多表的事务操作
  4. 04生成并应用数据库迁移

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pedronauck/skills --skill drizzle-orm

安装后在 Claude Code 中输入/drizzle-orm确认已加载。

附带文件references/patterns.md

详细介绍

Drizzle ORM 开发指南

本技能提供了在此项目中使用 Drizzle ORM 的指南、模式和最佳实践。

快速开始

如需详细的开发指南、模式和代码示例,请参阅 references/patterns.md。

核心理念

  • 默认类型安全:利用 TypeScript 和 Drizzle 的类型推断,在编译时捕获数据库错误
  • 性能优先:使用预处理语句和查询优化技术
  • SQL 透明性:保持 SQL 查询易于阅读,避免过度抽象
  • 最小开销:Drizzle 是一个轻量层——应合理使用,避免不必要的复杂性

常见任务

模式定义

按领域将模式组织到单独的文件中。使用流畅的约束链式调用,并为频繁查询的列添加索引。

export const users = pgTable('users', {
  id: uuid('id').primaryKey().defaultRandom(),
  email: varchar('email', { length: 255 }).notNull().unique(),
  createdAt: timestamp('created_at').defaultNow().notNull(),
});
类型导出

始终导出表类型,以供应用程序使用:

export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;
预处理语句

对频繁执行的查询使用预处理语句,以获得显著的性能提升:

export const getUserById = db
  .select()
  .from(users)
  .where(eq(users.id, sql.placeholder('id')))
  .prepare();

// Usage
const user = await getUserById.execute({ id: userId });
事务

对多步骤操作使用事务,以保持数据一致性:

return db.transaction(async (tx) => {
  const [user] = await tx.insert(users).values(userData).returning();
  const [profile] = await tx.insert(profiles).values({ userId: user.id, ...profileData }).returning();
  return { user, profile };
});

迁移命令

重要:迁移时始终使用包脚本。切勿直接调用 drizzle-kit。

  • 后端:pnpm run db:generate(生成迁移)
  • 后端:pnpm run db:migrate(应用迁移)
  • Landing:pnpm run db:generate(生成迁移)
  • Landing:pnpm run db:migrate(应用迁移)

代码组织

db/
  index.ts           (Drizzle client initialization)
  schema/
    users.ts         (User table & relations)
    posts.ts         (Post table & relations)
  queries/
    users.ts         (User query functions)
    posts.ts         (Post query functions)
  migrations/        (Auto-generated migration files)

应避免的常见问题

  1. 缺少索引:始终为 WHERE、JOIN 和 ORDER BY 子句中使用的列添加索引
  2. 查询无界:面向用户的查询始终使用 limit() 和 offset()
  3. 不安全的原始 SQL:切勿将用户输入拼接到原始 SQL 中——应使用 sql.placeholder()
  4. N+1 查询:使用 with() 进行预加载,或执行批量查询
  5. 缺少事务:将多步骤操作封装在事务中

验证清单

完成涉及 Drizzle ORM 的任务前:

  • 检查模式定义是否为查询的列设置了适当的索引
  • 确认重复查询使用了预处理语句
  • 确保多步骤操作由事务封装
  • 使用包脚本进行迁移(切勿直接调用 drizzle-kit)
  • 运行类型检查(pnpm run typecheck)和测试(pnpm run test)

如需详细规则和代码示例,请参阅 references/patterns.md。

评论

支持 Markdown