Prisma 使用教程
Prisma 是一個有趣的 ORM(Object-Relational Mapping)。
ORM 是一個對數據庫的抽象層。
在過去的幾個月中,我有幸在幾個不同的項目中使用了 Prisma,現在我想向您展示如何輕鬆入門(並不斷前進)。
我將在基於 Next.js 的 React 應用程序中使用 Prisma。
您可以創建一個新的 Next.js 應用程序文件夾:
npx create-next-app
要添加 Prisma,您首先需要在開發依賴中包括 prisma
:
npm install -D prisma
現在,您可以使用 npx
命令訪問 Prisma CLI 工具。嘗試運行:
npx prisma
您將看到如何使用它的說明。
現在運行以下命令為您的項目設置 Prisma:
npx prisma init
這將創建一個 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"
}
它還將創建一個 .env
文件(如果您之前沒有),其中包含 DATABASE_URL
環境變量:
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
模型來存儲我們想要購買的汽車列表:
model Car {
id Int @id @default(autoincrement())
brand String
model String
created_at DateTime @default(now())
bought Boolean @default(false)
}
我強烈建議您查閱 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):
npx prisma migrate dev
現在您可以在數據庫中看到 Car
表:
還有程式碼庫內的 prisma/migrations
文件夾中的文件,其中包含用於創建這些表的命令,例如:
-- CreateTable
CREATE TABLE "Car" (
"id" SERIAL NOT NULL,
"brand" TEXT,
"model" TEXT,
"created\_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT\_TIMESTAMP,
"bought" BOOLEAN NOT NULL DEFAULT false,
PRIMARY KEY ("id")
);
每次更改模式時,您都需要運行 npx prisma migrate dev
命令來應用更改。
太好了!現在我們可以使用 Prisma 將數據插入到數據庫中、檢索數據、刪除數據…等等。
現在使用以下命令安裝 @prisma/client
套件:
npm install @prisma/client
創建一個名為 lib
的文件夾,在其中創建一個 prisma.js
文件。在該文件中,我們初始化 PrismaClient 對象:
import { PrismaClient } from '@prisma/client'
let global = {}
const prisma = global.prisma || new PrismaClient()
if (process.env.NODE\_ENV === 'development') global.prisma = prisma
export default prisma
這段代碼是為了避免在開發模式下多次實例化 Prisma,因為我們會頻繁刷新(熱模塊重加載)。我們在第一次運行時將
prisma
添加到一個全局變量中,下一次重用該變量。
現在,在您希望使用 Prisma 的任何文件中,您可以添加以下代碼:
import prisma from 'lib/prisma'
然後您就可以開始使用了。
使用 prisma.car.findMany()
檢索所有汽車:
const cars = await prisma.car.findMany()
您可以通過傳遞一個對象來過濾數據,例如選擇所有 Ford
汽車:
const cars = await prisma.car.findMany({
where: {
brand: 'Ford',
},
})
您可以根據 id
值查找單個汽車,使用 prisma.car.findUnique()
:
const car = await prisma.car.findUnique({
where: {
id: 1,
},
})
使用 prisma.car.create()
添加新的汽車:
const car = await prisma.car.create({
brand: 'Ford',
model: 'Fiesta',
})
使用 prisma.car.delete()
刪除汽車:
await prisma.job.delete({
where: { id: 1 },
})
使用 prisma.car.update()
更新汽車的數據:
await prisma.job.delete({
where: { id: 1 },
data: {
bought: true
}
})
您還可以做更多事情,但這些是基礎知識,這就足夠讓您入門,並且在簡單的 CRUD 應用程序中滿足 95% 的需求。