SuperAPI AI 工具集

typescript-drizzle-orm

编程与开发

查看项目

更新于 10-16 00:06

技能介绍

用途:该资料介绍如何在 TypeScript 中使用 Drizzle ORM 进行类型安全的 SQL 开发,适用于定义数据库 schema、编写查询、设置关系、运行迁移,以及适配 PostgreSQL、MySQL、SQLite、Cloudflare D1 和 Durable Objects。

主要能力:

  • schema 定义:PostgreSQL 用 drizzle-orm/pg-core 的 pgTable、serial、text、varchar、integer、boolean、timestamp、uuid、primaryKey、unique、index;SQLite 用 drizzle-orm/sqlite-core 的 sqliteTable、text、integer。
  • 类型推断:用 typeof users.$inferSelect、$inferInsert;也支持 InferSelectModel、InferInsertModel,无需手写接口。
  • 关系:relations 定义一对多/多对一,外键使用 references(() => table.column)。
  • 两类查询 API:SQL 式(db.select().from().where().orderBy().limit()、leftJoin、eq/and/or/gt/like/desc 等)用于复杂连接;关系式(db.query.users.findMany({ with, columns }))需要把 { schema } 传给 drizzle()。
  • 写操作:insert、values、onConflictDoUpdate 的 upsert、update、delete,均可用 returning() 返回行。
  • 事务:db.transaction(async (tx) => {...})。
  • 组织模式:Entity 类做 API/领域/数据库层转换(fromRequest、fromRecord、toRecord、toResponse);Repository 类封装访问与错误处理;建议加 lockVersion 做乐观锁,并区分冲突、未找到、可重试等数据库错误码。

使用方式(依资料概要):先建 schema.ts,类型从 schema 推断,关系需显式定义,关系查询需传 schema,写操作按需 returning(),数据库访问包在 Repository 中,数据转换放在 Entity 类。

适用场景与限制:适合服务端 TypeScript 应用与无服务器/边缘环境(D1、Durable Objects)。原文仅提示细节见 PostgreSQL、SQLite、Cloudflare 等分库参考文档;MySQL 连接、迁移命令、版本要求与价格信息暂未提供,需按官方文档核对。