【Prisma】Prisma 命令大全(Node / NestJS 通用)
⚙️ Prisma 命令大全(Node / NestJS 通用)
🧩 Prisma 主要通过命令行(CLI)来管理数据库模型、迁移、生成客户端。
🪄 一、初始化项目
1️⃣ 安装依赖
pnpm add prisma @prisma/client
pnpm add -D prisma
解释:
prisma
:命令行工具(开发依赖)@prisma/client
:数据库客户端(运行时依赖)
2️⃣ 初始化 Prisma
npx prisma init
生成结构:
prisma/├── schema.prisma # 模型定义文件
.env # 数据库连接配置
.env
中会出现:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb?schema=public"
🧱 二、Prisma Schema 文件结构
示例 prisma/schema.prisma
:
generator client {provider = "prisma-client-js"
}datasource db {provider = "postgresql" // 可选: mysql, sqlite, mongodburl = env("DATABASE_URL")
}model User {id Int @id @default(autoincrement())name Stringemail String @uniqueposts Post[]
}model Post {id Int @id @default(autoincrement())title Stringcontent String?userId Intuser User @relation(fields: [userId], references: [id])
}
🏗️ 三、生成数据库表(迁移)
1️⃣ 创建迁移(Migration)
npx prisma migrate dev --name init
👉 会执行两件事:
- 创建数据库(如果还没有)
- 执行 SQL 迁移,生成对应的表结构
生成的目录:
prisma/├── migrations/│ ├── 202510161235-init/│ │ ├── migration.sql
2️⃣ 查看迁移状态
npx prisma migrate status
3️⃣ 修改模型后重新迁移
比如你新增字段:
model User {id Int @id @default(autoincrement())name Stringemail String @uniqueage Int?
}
然后执行:
npx prisma migrate dev --name add-age-field
🧠 四、生成 Prisma 客户端
每次修改模型后,都要重新生成客户端:
npx prisma generate
然后你就可以在项目中这样用:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();await prisma.user.findMany();
💡 提示:NestJS 中一般封装成单例服务类
PrismaService
来管理。
🔍 五、查看数据库状态
1️⃣ 打开可视化数据库管理器
npx prisma studio
启动一个 web 界面(默认端口
5555
),可以直接查看、编辑数据库内容。
2️⃣ 重置数据库(清空所有表)
npx prisma migrate reset
会提示确认:
Do you want to reset your database? All data will be lost. (y/N)
🧩 六、生产环境命令
在生产部署时,推荐使用:
npx prisma migrate deploy
作用:
- 执行所有已存在的迁移(不会生成新的)
- 常用于 CI/CD 自动化部署阶段
🧪 七、快速测试命令(生成表 + 客户端)
如果只是想创建表结构,不需要迁移文件,可用:
npx prisma db push
特点:
- 直接同步 schema 到数据库
- 不生成迁移记录
- 适合开发阶段快速调试
🔄 八、数据库操作命令汇总
命令 | 作用 | 说明 |
---|---|---|
prisma init | 初始化项目 | 创建 schema 与配置 |
prisma generate | 生成客户端 | 修改模型后必须执行 |
prisma migrate dev --name xxx | 开发环境迁移 | 创建并应用迁移 |
prisma migrate deploy | 生产环境迁移 | 执行所有迁移 |
prisma db push | 快速同步模型 | 无迁移记录 |
prisma db pull | 从数据库反向生成模型 | 数据库 → schema |
prisma migrate reset | 清空并重建数据库 | 会丢数据 |
prisma studio | 可视化数据库编辑器 | 本地浏览器界面 |
prisma format | 格式化 schema | 统一代码风格 |
prisma validate | 检查 schema 合法性 | 提前发现错误 |
🧰 九、进阶命令(开发效率神器)
1️⃣ 从现有数据库反向生成模型
npx prisma db pull
👉 Prisma 会根据数据库表结构自动生成 schema.prisma
。
2️⃣ 格式化 schema 文件
npx prisma format
自动美化对齐:
model User {id Int @id @default(autoincrement())name Stringemail String @unique
}
3️⃣ 校验 schema 文件合法性
npx prisma validate
输出:
✔ The schema at prisma/schema.prisma is valid 🚀
🧩 十、Prisma + NestJS 集成常用套路
1️⃣ 创建 PrismaService
// src/prisma/prisma.service.ts
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {async onModuleInit() {await this.$connect();}async onModuleDestroy() {await this.$disconnect();}
}
2️⃣ 模块注册
// src/prisma/prisma.module.ts
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';@Module({providers: [PrismaService],exports: [PrismaService],
})
export class PrismaModule {}
3️⃣ 在业务模块中注入
import { PrismaService } from '@/prisma/prisma.service';@Injectable()
export class UserService {constructor(private prisma: PrismaService) {}findAll() {return this.prisma.user.findMany();}
}
🧭 十一、实用命令组合
目标 | 命令组合 |
---|---|
初始化项目 | npx prisma init |
建立表结构 | npx prisma migrate dev --name init |
修改字段后同步 | npx prisma migrate dev --name modify-user |
重新生成客户端 | npx prisma generate |
启动可视化管理 | npx prisma studio |
同步生产数据库 | npx prisma migrate deploy |
重置数据库 | npx prisma migrate reset |
✅ 十二、常见错误与解决
错误信息 | 原因 | 解决方式 |
---|---|---|
P1001: Can't reach database server | 数据库没启动 | 检查 .env 连接 |
Schema is not valid | schema 写错 | 执行 prisma validate |
Error: generator not found | 没装 @prisma/client | 重新执行 npx prisma generate |
Database already exists | 迁移冲突 | npx prisma migrate reset |