跳至主要內容

如何從 Sequelize 遷移至 Prisma ORM

15 分鐘

簡介

本指南將示範如何將您的應用程式從 Sequelize 遷移至 Prisma ORM。我們將使用 Sequelize Express 範例 的擴充版本作為範例專案,用以演示遷移步驟。

本遷移指南以 PostgreSQL 作為範例資料庫,但同樣適用於任何其他 Prisma ORM 支援的關聯式資料庫。您可以前往 Prisma ORM 與 Sequelize 比較頁面,了解兩者的差異。

先決條件

在開始本指南之前,請確保您擁有:

  • 您想要遷移的 Sequelize 專案
  • 已安裝 Node.js(版本 18 或更高)
  • PostgreSQL 或其他受支援的資料庫
  • 具備 Sequelize 和 Express.js 的基本熟悉度

1. 準備遷移

1.1. 了解遷移流程

無論您正在建構哪種類型的應用程式或 API 層,從 Sequelize 遷移至 Prisma ORM 的步驟都是一樣的。

  1. 安裝 Prisma CLI
  2. 內省(Introspect)您的資料庫
  3. 建立基準遷移(Baseline migration)
  4. 安裝 Prisma Client
  5. 逐步將您的 Sequelize 查詢替換為 Prisma Client

這些步驟適用於您正在建構 REST API(例如使用 Express、Koa 或 NestJS)、GraphQL API(例如使用 Apollo Server、TypeGraphQL 或 Nexus),或任何其他使用 Sequelize 進行資料庫存取的應用程式。

1.2. 設定 Prisma 配置

建立新的 Prisma Schema 檔案

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

此指令為您建立了一個名為 prisma 的新目錄,其中包含以下檔案:

  • schema.prisma:您的 Prisma schema,用於指定資料庫連線與模型。
  • .env:一個 dotenv 檔案,用於將資料庫連線 URL 設定為環境變數。

Prisma schema 目前看起來如下:

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. 遷移資料庫 Schema

2.1. 檢視 (Introspect) 您的資料庫

執行 Prisma 的內省功能,從現有的資料庫建立 Prisma Schema

npx prisma db pull

這將會建立一個包含您資料庫 Schema 的 schema.prisma 檔案。

2.2. 建立基準遷移 (Baseline Migration)

為了持續使用 Prisma Migrate 來演進您的資料庫 Schema,您需要建立資料庫基準

首先,建立一個 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

該指令會將 0_init 加入 _prisma_migrations 資料表,標記為已執行。

現在您已擁有目前資料庫 Schema 的基準。若要進一步修改資料庫 Schema,您可以更新 Prisma schema 並使用 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. 更新控制器 (Controllers)

更新您的 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.