prisma配置教程
安装prisma脚手架
bashpnpm add prisma -D
设置prisma
bashnpx prisma init
这个命令会生成下面两个文件:
-
schema.prisma:指定你的数据库连接并包含数据库架构 -
.env:dotenv 文件,通常用于将你的数据库凭据存储在一组环境变量中
设置数据库连接
设置数据库的连接
prismagenerator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url= env("PRISMA_DATABASE_URL") }
配置环境变量
在.env添加环境变量,因为prisma这个是预先生成客户端的数据的,如果是在生产环境下,需要在替换下面数据库的连接。
envPRISMA_DATABASE_URL="mysql://root:123456@localhost:3306/my_store"
配置typescript
json"paths": { "@prisma/client": ["./prisma/client"] }
根据现有数据库生成prisma表结构
bashnpx prisma pull
安装客户端
bashpnpm add @prisma/client
生成客户端代码
bashnpx prisma generate
配置prisma模块
添加文件:prisma.module.ts
tsimport { Global, Module } from '@nestjs/common'; import { PrismaService } from './prisma.service'; @Global() @Module({ providers: [PrismaService], exports: [PrismaService], }) export class PrismaModule {}
添加文件:prisma.service.ts
tsimport { Global, Injectable, OnModuleInit } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; @Global() @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit { async onModuleInit() { await this.$connect(); } async onModuleDestroy() { await this.$disconnect(); } }
引入Mongo
prismagenerator client_mongodb { provider = "prisma-client-js" output = "./generated/client/mongodb" } datasource mongodb { provider = "mongodb" url = "mongodb://user:pass@host1:27017,host2:27017/dbname?replicaSet=rs0&authSource=admin"
脚本命令详解
json"scripts": { /* Prisma 相关命令 */ // MySQL 客户端生成 "prisma:generate:mysql": "prisma generate --schema=./prisma/mysql-schema.prisma", // 生成MySQL的Prisma客户端 // MongoDB 客户端生成 "prisma:generate:mongo": "prisma generate --schema=./prisma/mongo-schema.prisma", // 生成MongoDB的Prisma客户端 // MySQL 迁移管理 "prisma:migrate:mysql": "prisma migrate dev --name init --schema=./prisma/mysql-schema.prisma", // 创建并应用MySQL迁移文件 // MySQL 重置数据库 "prisma:reset:mysql": "prisma migrate reset --schema=./prisma/mysql-schema.prisma", // 重置MySQL数据库(会删除数据) // MySQL 数据可视化 "prisma:studio:mysql": "prisma studio --schema=./prisma/mysql-schema.prisma", // 启动MySQL的Prisma Studio // MongoDB 数据可视化 "prisma:studio:mongo": "prisma studio --schema=./prisma/mongo-schema.prisma", // 启动MongoDB的Prisma Studio // MySQL 架构同步 "prisma:pull:mysql": "prisma db pull --schema=./prisma/mysql-schema.prisma", // 从MySQL数据库拉取架构 // MongoDB 架构同步 "prisma:pull:mongo": "prisma db pull --schema=./prisma/mongo-schema.prisma", // 从MongoDB数据库拉取架构 // MySQL 架构推送 "prisma:push:mysql": "prisma db push --schema=./prisma/mysql-schema.prisma" // 将架构变更推送到MySQL数据库 }
特别注意
拉取项目代码后, 需要使用prisma:generate:mysql 和prisma:generate:mongo 命令生成客户端,否则直接运行会报错。
最佳的流程是:使用MongoDB 架构同步同步数据库表的信息,后在生产客户端,使得能够实现良好的类型支持。
全局引入
在app.module.ts:
ts@Module({ imports: [ PrismaModule }) export class AppModule implements NestModule { }
相关模块注入
ts@Controller('test') export class TestController { constructor(private readonly testService: TestService,private prisma:PrismaService) {} @Get('users') async getUserInfos() { return await this.prisma.user.findMany({}); } }
常见prisma命令
初始化与迁移
- 初始化 Prisma:
bashnpx prisma init
创建一个新的 Prisma 项目,生成 prisma/schema.prisma 文件和 .env 文件
- 生成 Prisma 客户端:
bashnpx prisma generate
根据 schema 文件生成 Prisma 客户端代码
- 创建迁移:
bashnpx prisma migrate dev --name init
迁移数据库,并且生成客户端
创建并应用数据库迁移(开发环境)
- 应用迁移(生产环境):
bashnpx prisma migrate deploy
- 重置数据库:
bashnpx prisma migrate reset
重置数据库并应用所有迁移(开发环境)
数据库操作
- 查看数据库状态:
bashnpx prisma migrate status
- 启动 Prisma Studio(GUI 界面):
bashnpx prisma studio
- 从现有数据库生成 schema:
bashnpx prisma db pull
- 将 schema 推送到数据库:
bashnpx prisma db push
数据操作
- 执行种子脚本:
bashnpx prisma db seed
- 运行 Prisma 查询:
bashnpx prisma shell
配置 Prisma 脚本
在 package.json 中配置常用脚本:
json{ "scripts": { "prisma:init": "prisma init", "prisma:generate": "prisma generate", "prisma:migrate": "prisma migrate dev", "prisma:deploy": "prisma migrate deploy", "prisma:studio": "prisma studio", "prisma:reset": "prisma migrate reset", "prisma:status": "prisma migrate status", "prisma:pull": "prisma db pull", "prisma:push": "prisma db push", "prisma:seed": "prisma db seed", "prisma:shell": "prisma shell" } }
加载中...