如何從 Sequelize 遷移至 Prisma ORM
簡介
本指南將示範如何將您的應用程式從 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 的步驟都是一樣的。
- 安裝 Prisma CLI
- 內省(Introspect)您的資料庫
- 建立基準遷移(Baseline migration)
- 安裝 Prisma Client
- 逐步將您的 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 目前看起來如下:
// 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 檔案:
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 比較頁面。
- Sequelize
- Prisma Client
// 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 }
});
// Find one
const user = await prisma.user.findUnique({
where: { id: 1 }
});
// Create
const user = await prisma.user.create({
data: {
email: 'alice@prisma.io',
name: 'Alice'
}
});
// Update
await prisma.user.update({
where: { id: 1 },
data: { name: 'New name' }
});
// Delete
await prisma.user.delete({
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 旅程: 我們的活躍社群。保持資訊靈通、參與其中,並與其他開發者合作
- 在 X 上關注我們 以獲取公告、現場活動和實用技巧。
- 加入我們的 Discord 提出問題、與社群對話,並透過對話獲得積極支援。
- 在 YouTube 上訂閱 查看教學、演示和直播。
- 在 GitHub 上交流 透過為存放庫加星標、報告問題或為 issue 做出貢獻。