尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Prisma安装使用

Prisma安装使用
📅 发布时间:2026/6/30 3:09:09

可以。下面按你自己动手的顺序来,先做到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_users、users、chat_rooms等即可。


第一步:安装 Prisma

在项目根目录im-h5-backend:

npminstallprisma --save-devnpminstall@prisma/client
  • prisma:CLI(db pull、generate)
  • @prisma/client:运行时客户端

第二步:初始化 Prisma

npx prisma init

会生成:

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

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

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

做法 A(推荐):根目录.env写DATABASE_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 可连、.env里DATABASE_URL正确,然后:

npx prisma db pull

含义:

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

成功后终端会提示 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 pull→npx 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.ts或admin-auth.service.ts。
  3. 再迁其余 admin service。

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

相关新闻

  • 国内智慧交通数字孪生头部企业汇总,一站式建设方案对比推荐
  • Rust的Send与Sync:理解线程安全标记trait
  • 2026 珠三角磁吸手机支架转轴源头厂家盘点|5 家实体工厂选型指南

最新新闻

  • 电商多店运维实战:解决云机长期挂机掉线、账号风控问题
  • PG 日报|UUID 解析 SIMD 加速,AI 行业动态速览
  • 使用Composer导出高清模型图像,并导出带BOM表的模型视图!
  • BambuStudio:从模型到成品的智能3D打印管家
  • WhatsApp验证码收不到别砸手机!六大死穴七招破解
  • NIKON 4S589-551酸浓度计装置

日新闻

  • 【计算机毕业设计案例】基于 Spring Boot+Vue 的电影售票系统设计与实现 前后端分离架构下影院在线购票管理平台(程序+文档+讲解+定制)
  • 到底 TMD 用哪个: npm, pnpm, Yarn, Bun, Deno? 傻瓜, 当然用 npm 啦
  • Google限制Meta使用Gemini模型 凸显AI授权竞争白热化

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号