快速入門
在本快速入門指南中,您將學習如何從頭開始使用 Prisma ORM,使用純 TypeScript 專案和本機 SQLite 資料庫檔案。它涵蓋了資料建模、遷移和查詢資料庫。
如果您想將 Prisma ORM 與您自己的 PostgreSQL、MySQL、MongoDB 或任何其他支援的資料庫一起使用,請改為前往這裡
先決條件
您需要在您的機器上安裝 Node.js (請參閱 系統需求 以了解官方支援的版本)。
1. 建立 TypeScript 專案並設定 Prisma ORM
第一步,建立一個專案目錄並導航至其中
mkdir hello-prisma
cd hello-prisma
接下來,使用 npm 初始化一個 TypeScript 專案
npm init -y
npm install typescript tsx @types/node --save-dev
這會建立一個 package.json
,其中包含您的 TypeScript 應用程式的初始設定。
請參閱 安裝說明 以了解如何使用不同的套件管理器安裝 Prisma。
現在,初始化 TypeScript
npx tsc --init
然後,將 Prisma CLI 作為開發依賴項安裝在專案中
npm install prisma --save-dev
最後,使用 Prisma CLI 的 init
命令設定 Prisma ORM
npx prisma init --datasource-provider sqlite
這會建立一個新的 prisma
目錄,其中包含 schema.prisma
檔案,並將 SQLite 設定為您的資料庫。您現在可以開始對資料進行建模,並使用一些表格建立資料庫。
2. 在 Prisma Schema 中對資料建模
Prisma Schema 提供了一種直覺的方式來對資料進行建模。將以下模型新增至您的 schema.prisma
檔案
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
Prisma Schema 中的模型有兩個主要用途
- 表示底層資料庫中的表格
- 作為產生的 Prisma Client API 的基礎
在下一節中,您將使用 Prisma Migrate 將這些模型對應到資料庫表格。
3. 執行遷移以使用 Prisma Migrate 建立資料庫表格
此時,您有一個 Prisma Schema,但還沒有資料庫。在您的終端機中執行以下命令,以建立 SQLite 資料庫以及由您的模型表示的 User
和 Post
表格
npx prisma migrate dev --name init
此命令執行了三件事
- 它在此遷移的
prisma/migrations
目錄中建立了一個新的 SQL 遷移檔案。 - 它針對資料庫執行了 SQL 遷移檔案。
- 它在底層執行了
prisma generate
(這安裝了@prisma/client
套件,並根據您的模型產生了客製化的 Prisma Client API)。
由於 SQLite 資料庫檔案之前不存在,因此該命令還在 prisma
目錄中建立了它,名稱為 dev.db
,這是透過 .env
檔案中的環境變數定義的。
恭喜,您現在已準備好資料庫和表格。讓我們繼續學習如何傳送一些查詢來讀取和寫入資料!
4. 探索如何使用 Prisma Client 將查詢傳送至您的資料庫
若要將查詢傳送至資料庫,您將需要一個 TypeScript 檔案來執行您的 Prisma Client 查詢。為此目的建立一個名為 script.ts
的新檔案
touch script.ts
然後,將以下樣板程式碼貼到其中
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... you will write your Prisma Client queries here
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
此程式碼包含一個在腳本結尾調用的 main
函數。它還實例化了 PrismaClient
,它表示資料庫的查詢介面。
4.1. 建立新的 User
記錄
讓我們從一個小查詢開始,以在資料庫中建立新的 User
記錄,並將結果物件記錄到主控台。將以下程式碼新增至您的 script.ts
檔案
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
您可以直接在編輯器中輸入程式碼,而不用複製程式碼,以體驗 Prisma Client 提供的自動完成功能。您也可以透過按下鍵盤上的 CTRL+SPACE 鍵主動調用自動完成功能。
接下來,使用以下命令執行腳本
npx tsx script.ts
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }
做得好,您剛剛使用 Prisma Client 建立了您的第一個資料庫記錄!🎉
在下一節中,您將學習如何從資料庫讀取資料。
4.2. 檢索所有 User
記錄
Prisma Client 提供了各種查詢,可從您的資料庫讀取資料。在本節中,您將使用 findMany
查詢,該查詢會傳回給定模型在資料庫中的所有記錄。
刪除先前的 Prisma Client 查詢,並改為新增新的 findMany
查詢
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const users = await prisma.user.findMany()
console.log(users)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
再次執行腳本
npx tsx script.ts
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]
請注意,單個 User
物件現在如何用主控台中的方括號括起來。那是因為 findMany
傳回了一個陣列,其中包含一個物件。
4.3. 使用 Prisma Client 探索關聯查詢
Prisma Client 的主要功能之一是易於使用關聯。在本節中,您將學習如何在巢狀寫入查詢中建立 User
和 Post
記錄。之後,您將看到如何使用 include
選項從資料庫檢索關聯。
首先,調整您的腳本以包含巢狀查詢
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
name: 'Bob',
email: 'bob@prisma.io',
posts: {
create: [
{
title: 'Hello World',
published: true
},
{
title: 'My second post',
content: 'This is still a draft'
}
],
},
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
再次執行腳本來執行查詢
npx tsx script.ts
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }
預設情況下,Prisma Client 僅在查詢的結果物件中傳回純量欄位。這就是為什麼即使您也為新的 User
記錄建立了新的 Post
記錄,主控台也僅列印具有三個純量欄位的物件:id
、email
和 name
。
為了也檢索屬於 User
的 Post
記錄,您可以透過 posts
關聯欄位使用 include
選項
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const usersWithPosts = await prisma.user.findMany({
include: {
posts: true,
},
})
console.dir(usersWithPosts, { depth: null })
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
再次執行腳本以查看巢狀讀取查詢的結果
npx tsx script.ts
[
{ id: 1, email: 'alice@prisma.io', name: 'Alice', posts: [] },
{
id: 2,
email: 'bob@prisma.io',
name: 'Bob',
posts: [
{
id: 1,
title: 'Hello World',
content: null,
published: true,
authorId: 2
},
{
id: 2,
title: 'My second post',
content: 'This is still a draft',
published: false,
authorId: 2
}
]
}
]
這次,您會看到列印了兩個 User
物件。它們都具有 posts
欄位 (對於 "Alice"
為空,對於 "Bob"
則填充了兩個 Post
物件),表示與它們關聯的 Post
記錄。
請注意,usersWithPosts
陣列中的物件也已完全類型化。這表示您將獲得自動完成功能,並且 TypeScript 編譯器將阻止您意外地輸入它們。
5. 後續步驟
在本快速入門指南中,您學習了如何在純 TypeScript 專案中開始使用 Prisma ORM。請隨意自行探索更多 Prisma Client API,例如,在 findMany
查詢中包含篩選、排序和分頁選項,或探索更多操作,如 update
和 delete
查詢。
在 Prisma Studio 中探索資料
Prisma ORM 隨附內建 GUI,用於檢視和編輯資料庫中的資料。您可以使用以下命令開啟它
npx prisma studio
使用您自己的資料庫設定 Prisma ORM
如果您想繼續使用 Prisma ORM 與您自己的 PostgreSQL、MySQL、MongoDB 或任何其他支援的資料庫,請按照設定 Prisma ORM 指南進行操作
透過 Prisma Optimize 取得查詢見解和分析
Prisma Optimize 可協助您產生見解並提供建議,以協助您加快資料庫查詢速度。
Optimize 旨在協助所有技能水平的開發人員編寫高效的資料庫查詢,減少資料庫負載並使應用程式更具回應性。
探索可立即執行的 Prisma ORM 範例
查看 GitHub 上的 prisma-examples
儲存庫,了解 Prisma ORM 如何與您最喜歡的程式庫一起使用。該儲存庫包含 Express、NestJS、GraphQL 的範例,以及 Next.js 和 Vue.js 的全端範例等等。
使用 Prisma Pulse 建立即時應用程式
Prisma Pulse 使您能夠建立立即對資料庫中的變更做出反應的應用程式,讓您可以輕鬆建構類型安全即時功能和應用程式
Demo | 描述 |
---|---|
starter | Prisma Pulse 入門應用程式 |
email-with-resend | 使用 Prisma Pulse 和 Resend 向新使用者傳送電子郵件的範例應用程式 |
fullstack-leaderboard | 即時排行榜 (使用 Next.js 建構) |
fullstack-simple-chat | 簡單聊天應用程式 (使用 Next.js 和 Express 建構) |
product-search-with-typesense | 將資料同步到 Typesense 的 Cron Job (使用 Hono.js 建構) |
data-sync-with-bigquery | 自動將資料同步到 Google BigQuery 的腳本 |
使用 Prisma Accelerate 加快資料庫查詢速度
Prisma Accelerate 是一個連線池和全域資料庫快取,可以大幅加快您的資料庫查詢速度。查看 速度測試 或嘗試將 Accelerate 與您最喜歡的框架一起使用
Demo | 描述 |
---|---|
nextjs-starter | 使用 Prisma Accelerate 的快取和連線池的 Next.js 專案 |
svelte-starter | 使用 Prisma Accelerate 的快取和連線池的 SvelteKit 專案 |
solidstart-starter | 使用 Prisma Accelerate 的快取和連線池的 Solidstart 專案 |
remix-starter | 使用 Prisma Accelerate 的快取和連線池的 Remix 專案 |
nuxt-starter | 使用 Prisma Accelerate 的快取和連線池的 Nuxt.js 專案 |
astro-starter | 使用 Prisma Accelerate 的快取和連線池的 Astro 專案 |
使用 Prisma ORM 建構應用程式
Prisma 部落格提供有關 Prisma ORM 的綜合教學課程,請查看我們最新的教學課程
加入 Prisma 社群 💚
Prisma 擁有龐大的開發人員社群。在 Discord 上加入我們,或使用 GitHub 討論區 提出問題。