如何从 TypeORM 迁移到 Prisma ORM
简介
本指南向您展示如何将您的应用程序从 TypeORM 迁移到 Prisma ORM。我们将使用 TypeORM Express 示例的扩展版本作为一个示例项目来演示迁移步骤。TypeORM Express example sample project
本迁移指南使用 PostgreSQL 作为示例数据库,但它同样适用于 Prisma ORM 支持的任何其他关系数据库。您可以在 Prisma ORM vs TypeORM 页面上了解 Prisma ORM 与 TypeORM 的比较。supported by Prisma ORM. You can learn how Prisma ORM compares to TypeORM on the Prisma ORM vs TypeORM page.
先决条件
在开始本指南之前,请确保您已拥有
- 一个您想要迁移的 TypeORM 项目
- 已安装 Node.js (版本 16 或更高版本)
- PostgreSQL 或另一个受支持的数据库
- 基本熟悉 TypeORM 和 Express.js
2. 准备迁移
2.1. 了解迁移过程
从 TypeORM 迁移到 Prisma ORM 的步骤始终相同,无论您正在构建何种类型的应用程序或 API 层
- 安装 Prisma CLI
- 内省您的数据库
- 创建基线迁移
- 安装 Prisma Client
- 逐步将您的 TypeORM 查询替换为 Prisma Client
无论您构建的是 REST API (例如,使用 Express、Koa 或 NestJS)、GraphQL API (例如,使用 Apollo Server、TypeGraphQL 或 Nexus),还是任何其他类型的使用 TypeORM 进行数据库访问的应用程序,这些步骤都适用。
2.2. 设置 Prisma 配置
创建一个新的 Prisma schema 文件
npx prisma init
使用您的数据库连接字符串更新 .env 文件中的 DATABASE_URL
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
3. 迁移数据库 schema
3.1. 内省您的数据库
运行 Prisma 的内省功能,从您现有的数据库创建 Prisma schema
npx prisma db pull
这将创建一个包含您的数据库 schema 的 schema.prisma 文件。
3.2. 创建基线迁移
创建并应用基线迁移以标记您数据库的当前状态
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > baseline.sql
npx prisma migrate resolve --applied "baseline"
4. 更新您的应用程序代码
4.1. 安装 Prisma Client
安装 Prisma Client 包
npm install @prisma/client
生成 Prisma Client
npx prisma generate
4.2. 替换 TypeORM 查询
开始将您的 TypeORM 查询替换为 Prisma Client。这是一个关于如何转换一些常见查询的示例
- TypeORM
- Prisma Client
// Find one
const user = await userRepository.findOne({
where: { id: 1 }
});
// Create
const user = await userRepository.save({
email: '[email protected]',
name: 'Alice'
});
// Update
await userRepository.update(1, {
name: 'New name'
});
// Delete
await userRepository.delete(1);
// Find one
const user = await prisma.user.findUnique({
where: { id: 1 }
});
// Create
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'Alice'
}
});
// Update
await prisma.user.update({
where: { id: 1 },
data: { name: 'New name' }
});
// Delete
await prisma.user.delete({
where: { id: 1 }
});
4.3. 更新您的控制器
更新您的 Express 控制器以使用 Prisma Client。例如,以下是如何更新 CreateUserAction
import { prisma } from '../client'
export class CreateUserAction {
async run(req: Request, res: Response) {
const { email, name } = req.body
const result = await prisma.user.create({
data: {
email,
name,
},
})
return res.json(result)
}
}
5. 测试和部署
5.1. 测试您的更改
测试所有迁移的端点,以确保它们按预期工作
npm test
5.2. 部署您的更改
- 部署您的 schema 更改
npx prisma migrate deploy
- 部署您的应用程序代码以及更新后的依赖项。
下一步
现在您已迁移到 Prisma ORM,您可以
- 使用 Prisma 强大的查询 API 添加更复杂的查询
- 设置 Prisma Studio 以进行数据库管理
- 实施数据库监控
- 使用 Prisma 的测试实用程序添加自动化测试
获取更多信息和更新
- Prisma ORM 文档
- Prisma Client API 参考
- 加入我们的 Discord 社区Discord community