如何使用 Prisma
Prisma 使用教程
Prisma 是一個有趣的 ORM(Object-Relational Mapping)。
ORM 是一個對數據庫的抽象層。
在過去的幾個月中,我有幸在幾個不同的項目中使用了 Prisma,現在我想向您展示如何輕鬆入門(並不斷前進)。
我將在基於 Next.js 的 React 應用程序中使用 Prisma。
您可以創建一個新的 Next.js 應用程序文件夾:
1 | npx create-next-app |
要添加 Prisma,您首先需要在開發依賴中包括 prisma
:
1 | npm install -D prisma |
現在,您可以使用 npx
命令訪問 Prisma CLI 工具。嘗試運行:
1 | npx prisma |
您將看到如何使用它的說明。
現在運行以下命令為您的項目設置 Prisma:
1 | npx prisma init |
這將創建一個 prisma
文件夾,在其中創建一個 schema.prisma
文件:
1 | // This is your Prisma schema file, |
它還將創建一個 .env
文件(如果您之前沒有),其中包含 DATABASE_URL
環境變量:
1 | DATABASE\_URL="postgresql://johndoe:[[email protected]](/cdn-cgi/l/email-protection):5432/mydb?schema=public" |
這個環境變量需要指向您的數據庫。
首先,讓我們解釋一下。Prisma 支持多種不同類型的(關聯)數據庫。我已經使用過 PostgreSQL 和 SQLite,但它還支持 MySQL、AWS Aurora 和 MariaDB。
在生產中,我喜歡使用 DigitalOcean 的托管數據庫(這是一個帶有免費 $100 信用額度的強制引薦鏈接這裡),但對於一個快速的示例應用程序,Railway.app 是一個很酷且免費的選擇。
註冊後,您可以點擊一下來提供 PostgreSQL 數據庫:
然後,您將立即獲取連接 URL:
將連接 URL 複製到您的 .env
文件中,作為 DATABASE_URL
的值。
現在是時候在模式中添加一個模型了,該模型將轉換為數據庫表格。
請注意,您也可以按相反的方式做,即如果您已經有了一個已經填充了表格的數據庫,可以運行
npx prisma introspect
來從數據庫生成模式。 Prisma 將從數據庫生成模式。
假設我們是一個喜歡收集汽車的奢侈億萬富翁。我們創建一個 Car
模型來存儲我們想要購買的汽車列表:
1 | model Car { |
我強烈建議您查閱 Prisma 模式參考文檔 中的所有內容。
此模型定義了 5 個字段:id
、brand
、model
、created_at
、bought
,每個字段都有其類型,包括 Int、String、DataTime 和 Boolean。
id
具有 @id
屬性,這意味著它是主鍵,這告訴數據庫管理系統使其唯一。它默認為自動遞增的值,因此每次添加一個新項目時,它都有一個唯一的整數序號:1、2、3、4…
請注意,您還可以使用唯一值和 @default(cuid())
或 @default(uuid())
。
created_at
使用 @default(now())
默認為當前日期時間,bought
默認為 false
。
現在,我們需要使用我們的模式來同步數據庫。我們可以通過運行命令 npx prisma migrate
來創建我們的第一個遷移(migration):
1 | npx prisma migrate dev |
現在您可以在數據庫中看到 Car
表:
還有程式碼庫內的 prisma/migrations
文件夾中的文件,其中包含用於創建這些表的命令,例如:
1 | -- CreateTable |
每次更改模式時,您都需要運行 npx prisma migrate dev
命令來應用更改。
太好了!現在我們可以使用 Prisma 將數據插入到數據庫中、檢索數據、刪除數據…等等。
現在使用以下命令安裝 @prisma/client
套件:
1 | npm install @prisma/client |
創建一個名為 lib
的文件夾,在其中創建一個 prisma.js
文件。在該文件中,我們初始化 PrismaClient 對象:
1 | import { PrismaClient } from '@prisma/client' |
這段代碼是為了避免在開發模式下多次實例化 Prisma,因為我們會頻繁刷新(熱模塊重加載)。我們在第一次運行時將
prisma
添加到一個全局變量中,下一次重用該變量。
現在,在您希望使用 Prisma 的任何文件中,您可以添加以下代碼:
1 | import prisma from 'lib/prisma' |
然後您就可以開始使用了。
使用 prisma.car.findMany()
檢索所有汽車:
1 | const cars = await prisma.car.findMany() |
您可以通過傳遞一個對象來過濾數據,例如選擇所有 Ford
汽車:
1 | const cars = await prisma.car.findMany({ |
您可以根據 id
值查找單個汽車,使用 prisma.car.findUnique()
:
1 | const car = await prisma.car.findUnique({ |
使用 prisma.car.create()
添加新的汽車:
1 | const car = await prisma.car.create({ |
使用 prisma.car.delete()
刪除汽車:
1 | await prisma.job.delete({ |
使用 prisma.car.update()
更新汽車的數據:
1 | await prisma.job.delete({ |
您還可以做更多事情,但這些是基礎知識,這就足夠讓您入門,並且在簡單的 CRUD 應用程序中滿足 95% 的需求。
tags: [“Prisma”, “ORM”, “React”, “Next.js”]