当前位置: 首页 > news >正文

【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

👉 会执行两件事:

  1. 创建数据库(如果还没有)
  2. 执行 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 validschema 写错执行 prisma validate
Error: generator not found没装 @prisma/client重新执行 npx prisma generate
Database already exists迁移冲突npx prisma migrate reset

http://www.dtcms.com/a/489960.html

相关文章:

  • 十月连环效应:宏观叙事与链上机会的临界点
  • 第六部分:VTK进阶(第161章 多渲染Pass组合)
  • 三相变流器矢量控制及参数设计系列(2):PWM原理
  • 网络层IP协议详解:互联网的灵魂所在
  • 深圳网站公司推广平台wordpress网站统计
  • 数据结构4:线性表3-链式存储的线性表
  • 如何理解随机过程中“样本空间”的概念
  • 最新机器人顶会IROS 2025的award paper 深入分析
  • 做一个介绍网站多少钱手机上怎么制作网站
  • 汽车存储技术的未来在何方?
  • 医院网站加快建设品牌设计工作室
  • 学校网站开发企业中征码查询入口
  • 睢宁做网站苏州建站公司哪个济南兴田德润实惠吗
  • 成都专业网站排名推广网站建设怎么找客源?
  • 龙岗网站优化网站备案 材料
  • 建设一个个人小说网站百度联盟网站备案信息
  • 购物网站创业时是如何做宣传的去国外做赌钱网站
  • 网站制作的文章不同类型网站比较及网站域名设计
  • 网站开发进入腾信职位保定网站建设费用
  • 李江seoseo软件工具箱
  • 律师网站建设导航网站的广告怎么做的
  • 北京移动网站建设公司平面设计需要用到的软件
  • 互联网营销型网站网站开发职业生涯规划范文
  • 关于单位建设网站的申请怎样做网站别人能访问
  • 网站建设先进个人材料自己做网站难么
  • 成都网站建设创意屏蔽ip网站
  • 网站的建设方法包括什么作用自己搭建一个网站需要多少钱?
  • 中国空间站图片设计类专业是文科还是理科
  • 聊城做手机网站推广做泌尿科网站价格
  • 台州品牌网站建设网站设计 公司 长沙