SuperAPI AI 工具集

drizzle-orm-v0

编程与开发

查看项目

更新于 10-27 16:20

技能介绍

用途

Drizzle ORM 用于在 TypeScript 应用中构建类型安全的数据库层,支持 PostgreSQL、MySQL 和 SQLite。该技能适用于 Drizzle ORM v0.45+,涵盖 schema 定义、类型安全查询、迁移和关系管理。它不覆盖数据库驱动安装、连接池配置以及其他 ORM。

主要能力

  • Schema 定义:使用表构建器(pgTable、mysqlTable、sqliteTable)定义带类型的列,列类型与数据库约束匹配(如带长度的 varchar、带 mode 的 timestamp)。索引通过表定义第二个参数中的 index() 辅助函数定义。
  • 类型安全查询:使用查询辅助函数(eq、and、or、like)构造 SQL,避免手写原始 SQL。通过 $inferSelect 和 $inferInsert 推断类型,消除手动类型声明。
  • 迁移:使用 Drizzle Kit 生成和执行迁移(drizzle-kit generate、drizzle-kit migrate),生产环境不使用 push。
  • 关系:使用 relations() 定义表间关系,并在已定义关系时使用关系查询构建器(db.query.*)处理复杂连接。
  • 事务:通过 db.transaction 确保多步骤操作的原子性。
  • 预编译语句:对频繁执行的查询使用 prepared statements 进行优化。
  • 错误处理:处理 DrizzleQueryError 以实现结构化错误处理。

使用方式

该技能假设使用 Drizzle ORM v0.45+、Drizzle Kit v0.31+(开发依赖,用于迁移)、PostgreSQL/MySQL/SQLite 数据库、TypeScript v5+ 严格模式以及 ESM 模块系统。

典型模式包括:

  • 使用 pgTable 等定义 schema,并通过 index() 添加索引,导出 $inferSelect 和 $inferInsert 类型。
  • 使用查询构建器(db.select().from().where())或关系查询构建器(db.query.users.findFirst)进行查询。
  • 使用 db.transaction 执行多步骤操作。
  • 使用 placeholder 和 .prepare() 创建预编译语句。
  • 使用 DrizzleQueryError 捕获并处理数据库错误。
  • 使用 relations() 定义一对多、多对一等关系。
  • 通过 drizzle-orm/node-postgres 的 drizzle() 与 pg 的 Pool 建立数据库连接。
  • 使用 drizzle-kit 的 defineConfig 配置迁移。

适用场景

适用于在 TypeScript 应用中构建数据库层,尤其是需要类型安全 SQL 查询、schema 定义、迁移和关系管理的场景。可与 Next.js Server Components 和 API 路由配合使用,也可与 Fastify 互补用于 API 开发。

限制

该技能不覆盖数据库驱动安装、连接池配置以及其他 ORM。应避免使用原始 SQL(除非必要)、手动类型断言、跳过迁移生成、在新 PostgreSQL 表中使用 serial(改用 identity 列)、过度索引、在只需少量列时获取完整行、在生产环境使用 push、以及在数据库支持日期/时间类型时使用基于字符串的 timestamp 模式。