跳至主要内容

如何从 Sequelize 迁移到 Prisma ORM

15 分钟

介绍

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

本迁移指南使用 PostgreSQL 作为示例数据库,但它同样适用于 Prisma ORM 支持的任何其他关系型数据库。您可以在 Prisma ORM vs 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. 逐步用 Prisma Client 替换您的 Sequelize 查询

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

1.2. 设置 Prisma 配置

创建一个新的 Prisma 模式文件

npx prisma init --output ../generated/prisma

此命令为您创建了一个名为 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"
}

generator client {
provider = "prisma-client"
output = "./generated/prisma"
}
提示

如果您使用的是 VS Code,请务必安装 Prisma VS Code 扩展,以实现语法高亮、格式化、自动完成和更多酷炫功能。

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

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

1.3. 配置 Prisma

在项目根目录中创建一个 prisma.config.ts 文件,内容如下

prisma.config.ts
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';

export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
},
});
注意

您需要安装 dotenv 包来加载环境变量。如果您还没有安装,请使用您的包管理器安装它

npm install dotenv

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 查询

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

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

// Create
const user = await User.create({
email: 'alice@prisma.io',
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 的测试工具添加自动化测试

更多信息


与 Prisma 保持联系

通过以下方式与我们保持联系,继续你的 Prisma 之旅: 我们的活跃社区。保持信息灵通,参与其中,并与其他开发人员协作。

我们真诚地感谢你的参与,并期待你成为我们社区的一部分!

© . This site is unofficial and not affiliated with Prisma Data, Inc.