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

Prisma安装使用

可以。下面按你自己动手的顺序来,先做到db pull+generate成功,暂时不改业务代码


前置条件(先确认)

  1. 本机 MySQL 已启动。
  2. 库名一般是im_db.env.dev里是DB_NAME=im_db)。
  3. 库里已有表(至少 admin 那几张;IM 表也在同一库没关系)。

终端自测:

mysql-uroot-p-e"USE im_db; SHOW TABLES;"

能看到admin_usersuserschat_rooms等即可。


第一步:安装 Prisma

在项目根目录im-h5-backend

npminstallprisma --save-devnpminstall@prisma/client
  • prisma:CLI(db pullgenerate
  • @prisma/client:运行时客户端

第二步:初始化 Prisma

npx prisma init

会生成:

prisma/ schema.prisma # 表结构定义 .env # 若已有,可能只追加 DATABASE_URL

第三步:配置连哪个库(关键)

Prisma默认读项目根目录的.env,不是你们的.env.dev

做法 A(推荐):根目录.envDATABASE_URL

根据.env.dev里的账号,写成一行(把密码改成你的):

DATABASE_URL="mysql://root:你的密码@127.0.0.1:3306/im_db"

格式:mysql://用户:密码@主机:端口/数据库名

做法 B:临时指定 env 文件

dotenv-e.env.dev -- npx prisma db pull

(需先npm i -D dotenv-cli,不如 A 省事。)

打开prisma/schema.prisma,确认顶部类似:

generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") }

「哪个库」=DATABASE_URL最后那段/im_db


第四步:从数据库反推表结构(db pull

确保 MySQL 可连、.envDATABASE_URL正确,然后:

npx prisma db pull

含义:

  • 连接im_db
  • 扫描该库下用户表(不是整个 MySQL 所有库)
  • 把表结构写入prisma/schema.prismamodel

成功后终端会提示 introspected 多少张表;打开prisma/schema.prisma应能看到大量model,例如:

model admin_users { id BigInt @id @default(autoincrement()) username String @unique password_hash String // ... } model users { // ... }

这是预期现象

  • IM + admin 表会一起被拉下来(同一库)。
  • 表名可能是snake_case 的 model 名(如admin_users),后面可慢慢改成AdminUser+@@map
  • 第一步不用改,先能generate再说。

若报错

报错处理
Can’t reach database检查 MySQL、host/port
Access denied用户名密码
Unknown databaseim_db先建库或改 URL
Authentication pluginMySQL 8 用户插件问题,查 MySQL 文档

第五步:检查schema.prisma(浏览即可)

db pull后建议看一眼:

  1. datasource仍是mysql+env("DATABASE_URL")
  2. model 数量是否和SHOW TABLES差不多。
  3. 关系@relation)Prisma 可能自动猜,错的以后改。

此阶段不必删 IM 的 model,也不必马上改 admin service。


第六步:生成客户端(generate

npx prisma generate

含义:

  • prisma/schema.prisma每一个model
  • node_modules/.prisma/client生成 TS 类型和PrismaClient

成功会看到类似:Generated Prisma Client ...

db pull的区别

命令作用
db pull数据库 → 写入schema.prisma
generateschema.prisma→ 生成@prisma/client代码

以后:改表结构→ 再pull或手改 schema → 再generate


第七步:验证是否生成成功(可选小脚本)

在项目根新建临时文件scripts/test-prisma.ts(测完可删):

import{PrismaClient}from'@prisma/client'constprisma=newPrismaClient()asyncfunctionmain(){// model 名以你 pull 后的 schema 为准,可能是 admin_users 或 AdminUserconstcount=awaitprisma.admin_users.count()console.log('admin_users count:',count)}main().catch(console.error).finally(()=>prisma.$disconnect())

运行:

npx tsx scripts/test-prisma.ts

能打出数字说明:连库 + pull + generate整条链路通了。

若 TS 报错Property 'admin_users' does not exist,打开schema.prisma看实际 model 名(admin_users还是AdminUser),和代码保持一致。


第八步:建议在package.json加的脚本(方便以后)

"prisma:pull":"prisma db pull","prisma:generate":"prisma generate","postinstall":"prisma generate"

postinstall可选;团队协作时有用,你一个人可以先不加。


第九步:和现有pool的关系(现在不用动)

现在: services/admin/* → 继续 mysql2 pool(不变) services/im/* → 继续 pool(不变) 以后: 新建 src/lib/prisma.ts → export prisma 逐个把 admin service 改成 prisma.xxx

做完 pull + generate 不会自动替换现有 SQL,只是准备好了工具。


推荐操作顺序( checklist )

□ npm install prisma @prisma/client □ npx prisma init □ 根目录 .env 配置 DATABASE_URL → im_db □ npx prisma db pull □ 打开 prisma/schema.prisma 确认有 admin_users 等 □ npx prisma generate □ npx tsx scripts/test-prisma.ts 测 count

只做 admin 时,schema 要删 IM 表吗?

不用。
db pull拉全库即可;IM 的 model 留在 schema 里不影响,只是generate会多生成一些类型,不用就没开销习惯问题

以后迁 IM 时反而省事。


以后每次改表怎么走

场景做法
别人改了 MySQL 表npx prisma db pullnpx prisma generate
你用 migrate 改表改 schema →npx prisma migrate dev→ 自动 generate
只改了 schema 手填npx prisma generate

你们现阶段用pull对齐现有库即可,migrate 可以 admin 稳定后再上。


下一步(pull/generate 成功之后)

  1. src/lib/prisma.ts(单例PrismaClient)。
  2. 只改一个最简单的:admin-settings.service.tsadmin-auth.service.ts
  3. 再迁其余 admin service。

你如果愿意,做完第四步或第六步后prisma/schema.prisma前几行或报错贴出来,我可以帮你看 model 名、该怎么写第一条prisma.xxx查询(仍可在 Ask 模式)。

http://www.jsqmd.com/news/1093364/

相关文章:

  • 从0到1:企业级AI项目迭代日记 Vol.56|每一个“差点能用”,都是一次真实的用户流失
  • 用AI自动提取小红书抖音脚本文案,同步Obsidian素材库
  • 162.乐理进阶:和声大调与旋律大调的实战应用与听觉辨识
  • 告别传统写作繁琐流程:gradpaper 的全流程辅助模式新在哪?
  • 拒绝玄学调参!开发者必修的 Prompt Engineering 十二式核心心法
  • 5分钟免费实现VR视频转2D播放的终极方案
  • Lemo-AI vs 顶尖产品:记忆驱动的智能革命
  • GPT-5.6发布前被叫停
  • MSPM0 DEBUGSS调试子系统:从SWD接口到功耗分析与安全控制
  • 海洋定点长期流速观测该选用哪款单点海流计?偶信告诉你答案
  • AI大模型就业:实践笔记 93
  • 密码学系列之流密码RSAECC等
  • NET 代码保护实战:从混淆到虚拟机保护
  • 【课程设计/毕业设计】基于 SpringBoot 的博客点赞收藏与数据统计系统 校园知识分享博客管理系统的设计与实现【附源码、数据库、万字文档】
  • Java毕业设计-基于 Web 的网络域名管理系统的设计与实现 基于 Web 架构的域名信息管理系统设计与开发(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 【通信原理笔记】【三】模拟信号调制——3.3 包络调制(AM):从数学原理到工程权衡
  • 【排故】Linux 镜像恢复 VNC 黑屏卡死:NFS 开机挂载阻塞故障完整排障
  • all-MiniLM-L6-v2 完整详解
  • Windows风扇智能控制终极指南:如何用FanControl告别噪音与过热
  • 零代码玩转AI自动化:EasyClaw全流程实操指南(安装部署+多平台互联+Agent调教)
  • Java计算机毕设之基于 SpringBoot 的极简个人创作博客平台设计与实现 自媒体轻量化博客运维管理系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 活动网络图管理化技术关键路径与时差
  • 【单片机毕业设计】基于 STM32 的老人健康运动监测装置设计,基于 STM32 的人体体征与跌倒报警设备开发(013301)
  • InteractiveHtmlBom-AD:让 Altium Designer 直接导出交互式 HTML BOM
  • 社评:筑牢思想主权之基,开启文明认知跃迁——论“贾子理论大厦”在人工智能时代的范式革命与时代价值
  • Java Web web喀什旅游网站系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】
  • 【UWP】使用 Vue/Vite 编写 WinJS/UWP
  • 【技术实战】kling-3.0-turbo 极速视频生成模型详解 + startapi.top 完整调用代码
  • 在程序员圈子里,Rust常常以学习路线陡峭而闻名。就我自己的个人理解来说,之所以说它“学习路线陡峭”,很大程度上都来源于以下三点:
  • 返回主页Do or Not Do, Must Keep Trying To Know The Result !尝试远比想象好 - - - - 弥烟袅绕