要使用 ORM 工具 Prisma ,需遵循「环境准备 → 项目初始化 → 数据建模 → 数据库迁移 → 数据查询」的核心流程。以下基于你提供的 Prisma 官方文档(TypeScript + SQLite 场景),提供完整、可落地的使用指南,同时覆盖关键概念和扩展场景
一、核心前提:环境准备
在开始前,确保本地环境满足以下条件:
- Node.js :需安装 v16.13.0 及以上版本(Prisma 官方推荐,可通过
node -v
验证)。 - 包管理器:npm、yarn 或 pnpm(本文以 npm 为例)。
- 数据库:本文以轻量级的 SQLite 为例(无需额外安装数据库服务);若使用 PostgreSQL/MySQL/MongoDB,需提前准备数据库实例和连接信息。
二、Step 1:初始化 TypeScript 项目(若从零开始)
若已有项目可跳过此步,直接进入 Prisma 安装;若从零开始,需先创建并配置 TypeScript 项目:
-
创建项目目录并进入
bash
bashmkdir prisma-demo && cd prisma-demo
-
初始化 npm 项目
bash
csharpnpm init -y # 生成 package.json
-
安装 TypeScript 相关依赖
bash
rubynpm install typescript tsx @types/node --save-dev # tsx:用于快速运行 TypeScript 脚本(无需手动编译) # @types/node:提供 Node.js 的 TypeScript 类型定义
-
初始化 TypeScript 配置
bash
csharpnpx tsc --init # 生成 tsconfig.json(默认配置即可,无需额外修改)
三、Step 2:安装并初始化 Prisma
Prisma 的核心组件包括 Prisma CLI (命令行工具)和 Prisma Client(类型安全的查询客户端),需先完成初始化:
1. 安装 Prisma CLI(开发依赖)
bash
css
npm install prisma --save-dev
2. 初始化 Prisma 项目
通过 prisma init
命令创建 Prisma 核心配置文件,并指定数据库类型(此处为 SQLite):
bash
shell
npx prisma init --datasource-provider sqlite --output ./prisma
# 参数说明:
# --datasource-provider sqlite:指定数据库类型为 SQLite(可选值:postgresql、mysql、mongodb 等)
# --output ./prisma:指定 Prisma 配置文件的存放目录(默认就是 ./prisma,可省略)
执行后,项目中会生成两个关键文件 / 目录:
prisma/schema.prisma
:Prisma 的核心配置文件,用于定义数据库连接、数据模型(Model)、生成规则等。.env
:环境变量文件,用于存储数据库连接字符串(默认生成 SQLite 连接,格式为DATABASE_URL="file:./prisma/dev.db"
)。
四、Step 3:数据建模(定义 Prisma Model)
Prisma Model 是「数据库表」与「代码类型」的映射,需在 prisma/schema.prisma
中定义。Model 的字段对应表的列,属性(如 @id
、@unique
)对应表的约束。
示例:定义 User 和 Post 模型
替换 prisma/schema.prisma
中的默认内容为以下代码(支持一对多关系):
prisma
kotlin
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js" // 生成 Prisma Client 的规则(固定)
}
datasource db {
provider = "sqlite" // 数据库类型(与初始化时一致)
url = env("DATABASE_URL") // 读取 .env 中的数据库连接字符串
}
// 用户模型(对应数据库中的 User 表)
model User {
id Int @id @default(autoincrement()) // 自增主键
email String @unique // 唯一约束(邮箱不重复)
name String? // 可选字段(允许为 null)
posts Post[] // 一对多关系:一个用户可拥有多个帖子
}
// 帖子模型(对应数据库中的 Post 表)
model Post {
id Int @id @default(autoincrement()) // 自增主键
title String // 必选字段(帖子标题)
content String? // 可选字段(帖子内容)
published Boolean @default(false) // 默认值:未发布(false)
author User @relation(fields: [authorId], references: [User.id]) // 多对一关系:关联 User
authorId Int // 外键:关联 User 表的 id 字段
}
Model 核心语法说明
语法 | 作用 | 示例 |
---|---|---|
@id |
标记为主键 | id Int @id |
@default(autoincrement()) |
自增默认值(仅整数主键支持) | id Int @id @default(autoincrement()) |
@unique |
标记为唯一约束(字段值不重复) | email String @unique |
String? |
可选字段(允许为 null,不加 ? 则必选) |
name String? |
@relation(...) |
定义关系(多对一 / 一对多 / 多对多) | author User @relation(fields: [authorId], references: [id]) |
五、Step 4:数据库迁移(创建表结构)
Prisma Migrate 是 Prisma 的数据库迁移工具,可将 Prisma Model 映射为实际的数据库表,并生成可追踪的迁移文件(便于团队协作和版本控制)。
执行首次迁移
bash
csharp
npx prisma migrate dev --name init
# 参数说明:
# --name init:给迁移命名(便于识别,如 "init" 表示初始化表结构)
执行后会完成三件事:
- 在
prisma/migrations
目录下生成迁移文件(如20240520123456_init/migration.sql
),包含创建User
和Post
表的 SQL 语句。 - 自动执行迁移文件,在
prisma/dev.db
中创建对应的表(SQLite 数据库文件,无需手动创建)。 - 自动生成 Prisma Client(无需额外执行命令)。
六、Step 5:使用 Prisma Client 操作数据库
Prisma Client 是类型安全的查询客户端(由 Prisma 根据 Model 自动生成),支持增删改查(CRUD)和关系查询,且提供 TypeScript 自动补全。
1. 安装 Prisma Client
bash
bash
npm install @prisma/client
# 注意:安装后会自动执行 `prisma generate`,生成客户端代码(位于 node_modules/.prisma/client)
2. 核心操作示例:创建脚本并执行
创建 script.ts
文件,编写查询逻辑(以下覆盖常见场景):
示例脚本:CRUD + 关系查询
typescript
php
// 1. 导入并初始化 Prisma Client
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient() // 实例化客户端(全局建议单例)
// 2. 定义异步函数(Prisma 查询均为异步操作)
async function main() {
// --------------------------
// 场景1:创建一条 User 记录
// --------------------------
const newUser = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io'
}
})
console.log('创建的用户:', newUser)
// --------------------------
// 场景2:创建 User 时,同时创建关联的 Post(嵌套创建)
// --------------------------
const userWithPosts = await prisma.user.create({
data: {
name: 'Bob',
email: 'bob@prisma.io',
posts: { // 嵌套创建关联的 Post(一对多关系)
create: [
{ title: 'Hello Prisma', published: true },
{ title: 'Prisma 关系查询', content: '这是一篇草稿' }
]
}
}
})
console.log('创建的用户(含帖子):', userWithPosts)
// --------------------------
// 场景3:查询所有 User,并包含关联的 Post(关系查询)
// --------------------------
const allUsersWithPosts = await prisma.user.findMany({
include: {
posts: true // 关联查询:返回用户的所有帖子
}
})
console.log('所有用户(含帖子):', JSON.stringify(allUsersWithPosts, null, 2))
// --------------------------
// 场景4:更新 Post 状态(将未发布改为已发布)
// --------------------------
const updatedPost = await prisma.post.update({
where: { id: 2 }, // 条件:更新 id=2 的帖子
data: { published: true } // 更新内容:发布状态改为 true
})
console.log('更新后的帖子:', updatedPost)
// --------------------------
// 场景5:删除一条 User 记录(级联删除关联的 Post)
// --------------------------
const deletedUser = await prisma.user.delete({
where: { id: 1 }, // 条件:删除 id=1 的用户
include: { posts: true } // 同时返回被删除的用户及关联帖子
})
console.log('删除的用户:', deletedUser)
}
// 3. 执行函数并处理连接
main()
.then(async () => {
await prisma.$disconnect() // 成功后断开数据库连接
})
.catch(async (e) => {
console.error('查询出错:', e)
await prisma.$disconnect() // 出错后也需断开连接
process.exit(1) // 退出进程(标记错误状态)
})
3. 运行脚本
使用 tsx
直接运行 TypeScript 脚本(无需编译为 JavaScript):
bash
npx tsx script.ts
执行后,控制台会输出各步骤的结果,同时可通过 Prisma Studio 可视化查看数据。
七、Step 6:可视化查看数据(Prisma Studio)
Prisma 内置 GUI 工具 Prisma Studio,可快速查看和编辑数据库内容,无需手动写 SQL。
启动 Prisma Studio
bash
npx prisma studio
启动后,会自动在浏览器打开 http://localhost:5555
,界面中可直观看到 User
和 Post
表的数据,支持增删改查操作(适合开发阶段调试)。
八、扩展场景:切换到其他数据库(如 PostgreSQL)
若需从 SQLite 切换到 PostgreSQL(或 MySQL),只需修改两个配置:
-
更新 .env 文件中的数据库连接字符串
env
ini# 原 SQLite 连接(注释或删除) # DATABASE_URL="file:./prisma/dev.db" # 新 PostgreSQL 连接(需替换为你的数据库地址、用户名、密码、数据库名) DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
-
更新 prisma/schema.prisma 中的数据源
prisma
inidatasource db { provider = "postgresql" // 改为 postgresql(或 mysql/mongodb) url = env("DATABASE_URL") }
-
重新执行迁移
bash
cssnpx prisma migrate dev --name switch_to_postgres
之后的查询逻辑(Prisma Client 代码)完全不变 ------Prisma 会自动适配不同数据库的语法,实现「一次建模,多数据库兼容」。
九、关键注意事项
- Prisma Client 生成时机 :当修改
schema.prisma
(如新增 Model、修改字段)后,需重新生成 Prisma Client,执行npx prisma generate
。 - 迁移文件的版本控制 :
prisma/migrations
目录需纳入 Git 管理,确保团队成员使用相同的表结构。 - 生产环境迁移 :生产环境不可用
prisma migrate dev
(会自动创建数据库),需使用prisma migrate deploy
(仅执行迁移,不创建数据库)。 - 类型安全:Prisma Client 会为每个 Model 和查询生成 TypeScript 类型,无需手动定义,错误会在编译阶段暴露(而非运行时)。
通过以上步骤,你已掌握 Prisma 的核心使用流程。如需深入,可进一步学习「多对多关系」「事务」「原生 SQL 查询」「Prisma Accelerate(连接池与缓存)」等高级特性,参考 Prisma 官方文档。
编辑分享
如何验证Prisma的安装是否成功?
如何使用Prisma进行数据库迁移?
Prisma有哪些高级特性和扩展场景?