Prisma 中文文档 下载 App

为什么选择 Prisma:对比传统 ORM 和原生 SQL

数据库开发的三大流派

在 Node.js/TypeScript 生态里,访问数据库主要有三种方式:原生 SQL 驱动、SQL 查询构造器、传统 ORM。每种都有利弊,Prisma 在这个三角里找到一个新的平衡点。

原生 SQL 驱动

直接用 pg、mysql2、better-sqlite3 等驱动发送 SQL 字符串。优点是完全控制、性能直接。缺点也很明显:

// 原生 pg 驱动的查询
const result = await client.query(
  'SELECT id, email, name FROM users WHERE email LIKE $1 ORDER BY created_at DESC LIMIT 10',
  ['%@company.com']
)
// result.rows 需要手动断言类型

SQL 查询构造器(knex.js)

用链式调用拼接 SQL,自动处理参数绑定防注入。比原生驱动写起来更舒服、有一定的 IDE 自动补全,但你始终在用 SQL 的思维模型思考——JOIN、GROUP BY、窗口函数这些概念不会消失,只是换了个写法。而且查询结果依然需要手动定义类型。

传统 ORM(TypeORM、Sequelize)

传统 ORM 把表映射成类,每行数据映射成类实例,用实例方法做 CRUD。这就是著名的 Active Record 模式。它解决了"写 SQL"这个痛点,但引入了新的问题:

Prisma 的新思路

Prisma 不走 Active Record,也不要求你直接操作类实例。它的核心设计选择是:

用声明式 Schema 文件描述数据模型,用代码生成器产出类型安全的查询 API。

这个选择带来几个关键优势:

对象思维,不做映射

你不需要手动把 SELECT * FROM users 的结果映射成 JavaScript 对象,也不需要定义 class User extends Model。Schema 里写 model User { ... },Prisma 自动知道怎么在数据库里存、怎么在代码里查。你在应用里拿到的就是普通 JavaScript 对象(POJO),没有多余的 getter/setter。

类型安全是自动的

Schema 里 email String @unique 意味着:

Schema 即契约

Schema 文件既是数据库结构的文档,也是生成 Client 的输入,还是迁移的依据。一份定义,多处派生,杜绝了"数据库改了但 ORM 模型没同步"这种常见 bug。

什么时候该用 Prisma

Prisma 不是银弹。以下场景特别适合:

以下情况值得再考虑:

对比矩阵和更多细节可以参考 Prisma 官方文档里的 Prisma vs Sequelize 对比页面。