跳到主內容

SQLite 快速入門

在本快速入門指南中,您將學習如何使用一個純 TypeScript 專案和本地 SQLite 資料庫檔案從頭開始使用 Prisma ORM。它涵蓋了 資料建模遷移查詢 資料庫。

如果您想將 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 --output ../generated/prisma

這會建立一個新的 prisma 目錄,其中包含一個 schema.prisma 檔案,並將 SQLite 配置為您的資料庫。現在,您可以開始建模資料並建立包含一些表的資料庫了。

2. 在 Prisma 模式中建模資料

Prisma 模式提供了一種直觀的資料建模方式。將以下模型新增到您的 schema.prisma 檔案中

prisma/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 模式中的模型有兩個主要用途

  • 表示底層資料庫中的表
  • 作為生成的 Prisma Client API 的基礎

在下一節中,您將使用 Prisma Migrate 將這些模型對映到資料庫表。

3. 執行遷移以使用 Prisma Migrate 建立資料庫表

此時,您有一個 Prisma 模式,但還沒有資料庫。在您的終端中執行以下命令,以建立 SQLite 資料庫以及由您的模型表示的 UserPost

npx prisma migrate dev --name init

此命令完成了三件事

  1. 它在 prisma/migrations 目錄中為此次遷移建立了一個新的 SQL 遷移檔案。
  2. 它針對資料庫執行了 SQL 遷移檔案。
  3. 它在後臺運行了 prisma generate(這會安裝 @prisma/client 包並根據您的模型生成定製的 Prisma Client API)。

由於 SQLite 資料庫檔案以前不存在,該命令還在 prisma 目錄中建立了它,其名稱為 dev.db,這透過 .env 檔案中的環境變數定義。

恭喜,您的資料庫和表已準備就緒。現在讓我們學習如何傳送一些查詢來讀取和寫入資料!

4. 探索如何使用 Prisma Client 向資料庫傳送查詢

要開始使用 Prisma Client,您需要安裝 @prisma/client

npm install @prisma/client

安裝命令會為您呼叫 prisma generate,它會讀取您的 Prisma 模式並生成一個根據您的模型量身定製的 Prisma Client 版本。

要向資料庫傳送查詢,您需要一個 TypeScript 檔案來執行您的 Prisma Client 查詢。為此目的建立一個名為 script.ts 的新檔案

touch script.ts

然後,將以下樣板程式碼貼上到其中

script.ts
import { PrismaClient } from './generated/prisma'

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 檔案中

script.ts
import { PrismaClient } from './generated/prisma'

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+空格 鍵來主動呼叫自動補全。

接下來,使用以下命令執行指令碼

npx tsx script.ts
顯示CLI結果
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }

太棒了,您剛剛使用 Prisma Client 建立了第一個資料庫記錄!🎉

在下一節中,您將學習如何從資料庫讀取資料。

4.2. 檢索所有 User 記錄

Prisma Client 提供了各種查詢來從資料庫讀取資料。在本節中,您將使用 findMany 查詢,它會返回給定模型在資料庫中的所有記錄。

刪除先前的 Prisma Client 查詢,轉而新增新的 findMany 查詢

script.ts
import { PrismaClient } from './generated/prisma'

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
顯示CLI結果
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]

請注意,現在控制檯中單個 User 物件被方括號括起來。這是因為 findMany 返回了一個包含單個物件的陣列。

4.3. 探索 Prisma Client 中的關係查詢

Prisma Client 的主要功能之一是易於處理 關係。在本節中,您將學習如何在巢狀寫入查詢中建立 UserPost 記錄。之後,您將瞭解如何使用 include 選項從資料庫中檢索關係。

首先,調整您的指令碼以包含巢狀查詢

script.ts
import { PrismaClient } from './generated/prisma'

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
顯示CLI結果
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }

預設情況下,Prisma Client 在查詢結果物件中只返回標量欄位。這就是為什麼即使您為新的 User 記錄建立了一個新的 Post 記錄,控制檯也只打印了一個包含三個標量欄位的物件:idemailname

為了也檢索屬於 UserPost 記錄,您可以透過 posts 關係欄位使用 include 選項

script.ts
import { PrismaClient } from './generated/prisma'

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
顯示CLI結果
[
{ 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 查詢中包含過濾、排序和分頁選項,或者探索更多操作,如 updatedelete 查詢。

在 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 Accelerate 加速您的資料庫查詢

Prisma Accelerate 是一個連線池和全球資料庫快取,可以顯著加快您的資料庫查詢速度。請檢視 速度測試 或使用您喜歡的框架嘗試 Accelerate

演示描述
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 之旅 我們活躍的社群。保持瞭解、積極參與並與其他開發人員協作

我們真誠地重視您的參與,並期待您成為我們社群的一員!

© . This site is unofficial and not affiliated with Prisma Data, Inc.