從 CLI
本頁提供在設定 Prisma Postgres 與 prisma init --db
之後的逐步指南
- 設定具有 Prisma ORM 的 TypeScript 應用程式
- 遷移您的資料庫結構描述
- 從 TypeScript 查詢您的資料庫
先決條件
本指南假設您已使用 prisma init --db
設定 Prisma Postgres 執行個體
npx prisma@latest init --db
一旦此命令終止
- 您已登入 Prisma Data Platform。
- 已建立新的 Prisma Postgres 執行個體。
- 已使用空的
schema.prisma
檔案建立prisma/
資料夾。 DATABASE_URL
環境變數已在.env
檔案中設定。
1. 整理您的專案目錄
如果您在想要專案存在的資料夾內執行 prisma init --db
命令,您可以跳過此步驟並繼續進行下一個章節。
如果您在預期的專案目錄之外(例如,在您的主資料夾或其他位置)執行命令,您需要將產生的 prisma
資料夾和 .env
檔案移動到專用的專案目錄中。
建立一個新的資料夾(例如 hello-prisma
),您想要專案存在的位置,並將必要檔案移動到其中
mkdir hello-prisma
mv .env ./hello-prisma/
mv prisma ./hello-prisma/
導航到您的專案資料夾
cd ./hello-prisma
現在您的專案已在正確的位置,請繼續進行設定。
2. 設定您的專案
2.1. 設定 TypeScript
初始化 TypeScript 專案並新增 Prisma CLI 作為開發依賴項
npm init -y
npm install typescript tsx @types/node --save-dev
這會建立一個 package.json
檔案,其中包含您的 TypeScript 應用程式的初始設定。
接下來,在專案中以 tsconfig.json
檔案初始化 TypeScript
npx tsc --init
2.2. 設定 Prisma ORM
安裝使用 Prisma Postgres 所需的依賴項
npm install prisma --save-dev
npm install @prisma/extension-accelerate
2.3. 建立 TypeScript 腳本
在根目錄中建立一個 index.ts
檔案,這將用於使用 Prisma ORM 查詢您的應用程式
touch index.ts
3. 遷移資料庫結構描述
更新您的 prisma/schema.prisma
檔案以包含簡單的 User
模型
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 Migrate 遷移您的資料庫
npx prisma migrate dev --name init
4. 使用 Prisma ORM 發送查詢
將以下樣板程式碼貼到 index.ts
中
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
// ... you will write your Prisma ORM 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
記錄,並將結果物件記錄到控制台。將以下程式碼新增到您的 index.ts
檔案中
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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)
})
接下來,使用以下命令執行腳本
npx tsx index.ts
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }
做得好,您剛剛使用 Prisma Postgres 建立了您的第一個資料庫記錄!🎉
4.2. 檢索所有 User
記錄
Prisma ORM 提供各種查詢以從資料庫讀取資料。在本節中,您將使用 findMany
查詢,該查詢會傳回給定模型中資料庫中的所有記錄。
刪除先前的 Prisma ORM 查詢,並新增新的 findMany
查詢
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.ts
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]
請注意,控制台中單個 User
物件現在是如何用方括號括起來的。那是因為 findMany
傳回了一個陣列,其中包含一個物件。
4.3. 探索關聯查詢
Prisma ORM 的主要功能之一是易於使用關聯。在本節中,您將學習如何在巢狀寫入查詢中建立 User
和 Post
記錄。之後,您將看到如何使用 include
選項從資料庫檢索關聯。
首先,調整您的腳本以包含巢狀查詢
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.ts
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }
為了也檢索屬於 User
的 Post
記錄,您可以使用 include
選項,透過 posts
關聯欄位
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
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 index.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
記錄。
下一步
您剛開始接觸基本的 Prisma Postgres 設定。如果您想探索更複雜的查詢、快取和即時功能,請查看官方的快速入門。
在 Prisma Studio 中檢視和編輯資料
Prisma ORM 帶有一個內建 GUI,用於檢視和編輯資料庫中的資料。您可以使用以下命令開啟它
npx prisma studio
使用 Prisma Postgres,您也可以直接在 Prisma Studio 內部使用透過在您的專案中選擇 Studio 標籤。
使用 Next.js 建立全端應用程式
了解如何在全端應用程式中使用 Prisma Postgres
探索可立即執行的範例
查看 GitHub 上的 prisma-examples
儲存庫,以了解如何將 Prisma ORM 與您最喜歡的程式庫一起使用。該儲存庫包含 Express、NestJS、GraphQL 以及 Next.js 和 Vue.js 的全端範例,以及更多內容。
這些範例預設使用 SQLite,但您可以按照專案 README 中的說明,在幾個簡單的步驟中切換到 Prisma Postgres。s
加入 Prisma 社群 💚
Prisma 擁有龐大的開發人員社群。在 Discord 上加入我們,或使用 GitHub Discussions 提出問題。