跳到主要内容

如何从 Sequelize 迁移到 Prisma ORM

简介

本指南将向你展示如何将你的应用程序从 Sequelize 迁移到 Prisma ORM。我们将使用 Sequelize Express 示例 的扩展版本作为 示例项目 来演示迁移步骤。

本迁移指南使用 PostgreSQL 作为示例数据库,但它同样适用于任何其他 Prisma ORM 支持的 关系数据库。你可以在 Prisma ORM 与 Sequelize 页面上了解 Prisma ORM 与 Sequelize 的比较。

先决条件

在开始本指南之前,请确保你拥有

  • 你要迁移的 Sequelize 项目
  • 已安装 Node.js (版本 18 或更高)
  • PostgreSQL 或另一个受支持的数据库
  • 基本熟悉 Sequelize 和 Express.js

1. 准备迁移

1.1. 理解迁移过程

无论你正在构建何种类型的应用程序或 API 层,从 Sequelize 迁移到 Prisma ORM 的步骤始终相同

  1. 安装 Prisma CLI
  2. 内省你的数据库
  3. 创建基线迁移
  4. 安装 Prisma Client
  5. 逐步将你的 Sequelize 查询替换为 Prisma Client

无论你是正在构建 REST API (例如,使用 Express、Koa 或 NestJS)、GraphQL API (例如,使用 Apollo Server、TypeGraphQL 或 Nexus),还是任何其他使用 Sequelize 进行数据库访问的应用程序,这些步骤都适用。

1.2. 设置 Prisma 配置

创建一个新的 Prisma 模式文件

npx prisma init

此命令为你创建了一个名为 prisma 的新目录,其中包含以下文件

  • schema.prisma:你的 Prisma 模式,用于指定你的数据库连接和模型
  • .env:一个 dotenv,用于将你的数据库连接 URL 配置为环境变量

Prisma 模式目前如下所示

prisma/schema.prisma
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}
提示

如果你正在使用 VS Code,请务必安装 Prisma VS Code 扩展 以获得语法高亮、格式化、自动完成以及更多炫酷功能。

使用你的数据库连接字符串更新 .env 文件中的 DATABASE_URL

DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"

2. 迁移数据库模式

2.1. 内省你的数据库

运行 Prisma 的内省功能,从你现有的数据库创建 Prisma 模式

npx prisma db pull

这将创建一个包含你的数据库模式的 schema.prisma 文件。

2.2. 创建基线迁移

要继续使用 Prisma Migrate 来演变你的数据库模式,你需要 对你的数据库进行基线处理

首先,创建一个 migrations 目录,并在其中添加一个目录,使用你首选的迁移名称。在本示例中,我们将使用 0_init 作为迁移名称

mkdir -p prisma/migrations/0_init

接下来,使用 prisma migrate diff 生成迁移文件。使用以下参数

  • --from-empty:假设你要迁移的数据模型是空的
  • --to-schema-datamodel:使用 datasource 块中的 URL 的当前数据库状态
  • --script:输出 SQL 脚本
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql
npx prisma migrate resolve --applied 0_init

该命令将通过将其添加到 _prisma_migrations 表中来标记 0_init 为已应用。

你现在已经为当前的数据库模式设置了基线。要对你的数据库模式进行进一步的更改,你可以更新你的 Prisma 模式,并使用 prisma migrate dev 将更改应用到你的数据库。

3. 更新你的应用程序代码

3.1. 安装 Prisma Client

下一步,你可以在你的项目中安装 Prisma Client,这样你就可以开始替换你项目中当前使用 Sequelize 进行的数据库查询

npm install @prisma/client

安装 Prisma Client 后,你可以生成 Prisma Client 代码

npx prisma generate

3.2. 替换 Sequelize 查询

在本节中,我们将展示一些从 Sequelize 迁移到 Prisma Client 的示例查询,这些示例查询基于示例 REST API 项目中的路由。有关 Prisma Client API 与 Sequelize 不同的全面概述,请查看 API 比较 页面。

// Find one
const user = await User.findOne({
where: { id: 1 }
});

// Create
const user = await User.create({
email: '[email protected]',
name: 'Alice'
});

// Update
await User.update({ name: 'New name' }, {
where: { id: 1 }
});

// Delete
await User.destroy({
where: { id: 1 }
});

3.3. 更新你的控制器

更新你的 Express 控制器以使用 Prisma Client。例如,以下是如何更新用户控制器的方法

import { prisma } from '../client'

export class UserController {
async create(req: Request, res: Response) {
const { email, name } = req.body

const result = await prisma.user.create({
data: {
email,
name,
},
})

return res.json(result)
}
}

下一步

现在你已经迁移到 Prisma ORM,你可以

  • 使用 Prisma 强大的查询 API 添加更复杂的查询
  • 设置 Prisma Studio 进行数据库管理
  • 实施数据库监控
  • 使用 Prisma 的测试实用程序添加自动化测试

有关更多信息和更新