一、Prisma 简介
Prisma 是一个现代化的数据库工具链,它简化了数据库访问并提高了开发者的生产力。以下是 Prisma 的核心特点:
主要组件
Prisma Client:自动生成的类型安全数据库客户端,支持多种编程语言
Prisma Migrate:数据库迁移工具,支持版本控制和协作开发
Prisma Studio:直观的GUI界面,用于查看和编辑数据库数据
核心优势
类型安全:自动生成的TypeScript/JavaScript类型与数据库模式保持同步
直观的数据建模:使用声明式的Prisma Schema语言定义数据模型
多数据库支持:兼容PostgreSQL、MySQL、SQLite、SQL Server和MongoDB
开发者友好:减少样板代码,提供直观的API进行复杂查询
典型工作流程
在
schema.prisma文件中定义数据模型使用Prisma Migrate创建和同步数据库结构
通过自动生成的Prisma Client在应用中执行数据库操作
Prisma特别适合需要强类型、高效数据库访问的现代应用开发,是传统ORM(如TypeORM)的强力替代方案。
二、安装
1. vscode 插件安装
为 .prisma 文件添加语法高亮、格式化、自动补全、跳转到定义和 linting。

2. 项目安装prisma
# 安装类库
npm install prisma --save-dev
# 数据库初始化, 初始化后项目根目录出现 prisma 文件夹
npx install init --datasource-provider sqlite
# 生成测试数据库
npx prisma migrate dev
3. 修改配置
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
修改 output 指向项目根目录
修改DATABASE_URL, 默认生成db文件位于prisma目录
三、常用CLI指令
Prisma 常用 CLI 指令大全
Prisma CLI 是与 Prisma 交互的主要工具,以下是常用的命令及其用途:
1. 初始化相关命令
# 在新项目中初始化 Prisma
npx prisma init
# 指定使用特定数据库初始化
npx prisma init --datasource-provider postgresql
# 可选值: postgresql, mysql, sqlite, sqlserver, mongodb, cockroachdb
2. 数据库迁移命令
# 创建新的迁移文件
npx prisma migrate dev --name init
# 应用所有未执行的迁移
npx prisma migrate deploy
# 重置数据库并重新应用所有迁移
npx prisma migrate reset
# 生成迁移但不应用(用于检查)
npx prisma migrate dev --create-only
# 在生产环境运行迁移
npx prisma migrate deploy
npx prisma migrate dev --name init命令的作用是:生成新的迁移文件(migration files)
应用该迁移到本地开发数据库
更新 Prisma 客户端(prisma client)
这个命令主要用于开发环境,帮助你在本地数据库更新结构,并生成对应的迁移历史。
npx prisma migrate deploy命令的作用是:仅在生产环境或非交互环境中执行
根据已经存在的迁移文件,直接应用所有尚未应用的迁移到数据库
不带交互,也不生成新的迁移文件
总结:如果你是在开发环境,刚执行了npx prisma migrate dev --name init,不需要再额外执行 migrate deploy。如果你是在生产环境或者CI/CD流程,通常不会执行migrate dev,而是会用构建好的迁移文件配合 npx prisma migrate deploy 来应用迁移。
开发阶段只执行
npx prisma migrate dev --name init就够了。部署到生产或测试环境时,执行
npx prisma migrate deploy。
3. 客户端生成命令
# 生成 Prisma Client
npx prisma generate
# 生成并查看客户端类型
npx prisma generate --watch
4. 数据库操作命令
# 启动 Prisma Studio (可视化数据库管理)
npx prisma studio
# 执行数据库种子脚本
npx prisma db seed
# 推送 schema 到数据库(不创建迁移)
npx prisma db push
# 检查 schema 与数据库的差异
npx prisma db pull
5. 开发与调试命令
# 格式化 Prisma schema 文件
npx prisma format
# 验证 schema 文件
npx prisma validate
# 查看 Prisma 版本信息
npx prisma --version
# 调试模式运行(显示详细日志)
npx prisma --debug <command>
6. 特有命令
# 生成迁移的 SQL 脚本(不执行)
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script
# 从现有数据库导入 schema
npx prisma db pull
# 生成 ER 图
npx prisma generate --data-proxy
7. 常用组合命令
# 开发工作流典型组合
npx prisma migrate dev --name add_user_model && npx prisma generate
# 重置数据库并重新种子数据
npx prisma migrate reset && npx prisma db seed
四、Prisma Model 基本配置指南
Prisma 的 model 是数据模型的核心部分,以下是一些常见的基本配置和用法:
1. 基本 Model 定义
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
age Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
2. 字段类型和修饰符
基本类型:
Int,String,Boolean,DateTime,Float,Decimal,Json,Bytes修饰符:
?- 可选字段[]- 列表/数组@unique- 唯一约束@default- 默认值
3. 关系配置
一对一关系
model User {
id Int @id @default(autoincrement())
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int @unique // 关系标量字段
}
一对多关系
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
}
多对多关系
model Post {
id Int @id @default(autoincrement())
tags Tag[]
}
model Tag {
id Int @id @default(autoincrement())
posts Post[]
}
4. 索引配置
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
@@index([email, name]) // 复合索引
@@unique([name, age]) // 复合唯一约束
}
5. 枚举类型
enum Role {
USER
ADMIN
MODERATOR
}
model User {
id Int @id @default(autoincrement())
role Role @default(USER)
}
6. 映射配置
model User {
id Int @id @default(autoincrement())
name String @map("user_name") // 映射到不同的列名
@@map("users") // 映射到不同的表名
}
7. 高级默认值
model User {
id Int @id @default(autoincrement())
uuid String @default(uuid())
timestamp DateTime @default(now())
sequence Int @default(autoincrement())
active Boolean @default(true)
}
8. 原生类型属性
model User {
id Int @id @default(autoincrement())
name String @db.VarChar(255)
age Int @db.SmallInt
balance Float @db.Decimal(10, 2)
createdAt DateTime @default(now()) @db.Timestamp(6)
}
这些配置可以根据实际项目需求进行组合和调整,Prisma 提供了丰富的选项来满足不同的数据建模需求。
五、 创建单例prisma客户端
1. tsconfig.json 修改
"paths": {
"@/*": ["./src/*"],
"$/*": ["./*"]
}增加$ 指向
2. 创建prismaClient单例
import { PrismaClient } from "$/generated/prisma"
const prismaClientSingleton = () => {
return new PrismaClient();
}
declare const globalThis: {
prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;
const db = globalThis.prismaGlobal ?? prismaClientSingleton();
export default db;
if(process.env.NODE_ENV !== "production") globalThis.prismaGlobal = db;
评论区