选择 TypeScript 数据库工具,应先确认数据库、运行环境、团队的 SQL 能力和迁移需求,再比较查询与模型管理方式。包体积、冷启动时间、下载量或 GitHub 星数不能单独决定选型;缺少版本、驱动和测试条件的数字不适合横向排名。
适用范围与版本
本文比较 Drizzle、Prisma、TypeORM、MikroORM 和 Kysely 的选型维度,不是一份性能排行榜。不同主版本、数据库驱动和部署平台的支持范围可能不同,采用前需检查目标版本的官方文档与锁文件。
本站当前项目使用 Drizzle ORM 0.45.2、postgres 3.4.9 和 PostgreSQL。文中的 Drizzle 查询示例已在这个依赖组合下检查生成 SQL;这不代表其他工具已在本站完成相同负载的实测。
Prisma 的数据库支持尤其需要按版本核对。 本次读取的 Prisma ORM 7 升级指南明确提示 v7 尚不支持 MongoDB,并提示 MongoDB 用户继续使用 v6。因此不能把其他版本的数据库支持列表直接贴到 Prisma 7。该说明仅针对 v7 升级指南,不代表所有后续版本;实际选型仍应检查所选版本的连接器和升级文档。
一、先明确你需要什么抽象
| 工具 | 主要使用方式 | 选型时优先验证 |
|---|---|---|
| Drizzle | 用 TypeScript 定义表,通过接近 SQL 的 API 组合查询 | 方言和驱动支持、生成 SQL、迁移流程、复杂关联查询 |
| Prisma | 定义 Prisma 数据模型,生成客户端,通过模型 API 查询 | 主版本和连接器、客户端生成、驱动适配器、迁移和连接池配置 |
| TypeORM | 使用实体和仓储等 API 管理数据库操作 | 目标版本、实体生命周期、关系加载策略、事务与迁移 |
| MikroORM | 围绕实体管理器、身份映射等机制管理对象 | 请求上下文隔离、变更提交边界、关系加载和驱动支持 |
| Kysely | 使用类型化 SQL 查询构建器组织查询 | 数据库类型定义如何同步、方言驱动、迁移与对象映射需求 |
没有必要让所有工具承担同一套功能。查询构建器与包含实体生命周期管理的 ORM,提供的抽象不同;应把你需要补充的基础设施也纳入维护成本。
二、Drizzle:保留 SQL 的表达方式
Drizzle 的表定义与查询可以放在 TypeScript 文件中。以 PostgreSQL 为例:
import { boolean, pgTable, serial, text, timestamp } from "drizzle-orm/pg-core";
import { desc, eq } from "drizzle-orm";
const usersTable = pgTable("users", {
id: serial("id").primaryKey(),
email: text("email").notNull().unique(),
active: boolean().().(),
: ().().(),
});
query = db.({ : usersTable., : usersTable. })
.(usersTable)
.((usersTable., ))
.((usersTable.), (usersTable.))
.();
.(query.());
评论 0
暂无评论。