NestJs--Prisma 7的安装与数据库配置(超完整)

前言

在现代后端开发中,NestJS `凭借优雅的架构、TypeScript 强类型支持成为企业级 Node.js 框架首选;Prisma 7 作为新一代 ORM,彻底解决了传统数据库操作的类型不安全、语法繁琐问题。

本文从零到一,超完整讲解 NestJS 集成 Prisma 7 的全流程:安装、初始化、配置、CRUD 实战、连接池优化、生产环境配置,一步到位直接落地项目。

什么是 Prisma 7 ORM?

ORM(Object-Relational Mapping)的本质是把数据库表映射为代码中的对象,让开发者用面向对象方式操作数据库,不用手写原生 SQL。Prisma 7 不是传统 ORM 的 "升级版",而是重构式新一代 ORM

  • 核心架构:完全抛弃 Rust 查询引擎,重写为纯 TypeScript 运行时 + 查询编译器,消除 JS 与 Rust 跨进程通信瓶颈,适配 Serverless / 边缘环境(Cloudflare Workers、Vercel Edge)Prisma
  • 工作流:Schema 优先(Schema-First) ------ 用 Prisma Schema 定义数据模型 → 自动生成类型安全的 Prisma Client → 用 Client 做 CRUD → 自动生成数据库迁移 → 可视化管理数据
  • 核心价值:全程 TypeScript 类型安全、零冗余 SQL、版本化迁移、极简 API、全环境兼容

ORM 说白了就是:不用写复杂的数据库 SQL 语句,用写代码的方式操作数据库

你可以把它理解成:

  • 一个自动帮你建表、改表的工具
  • 一个自动帮你写 SQL的工具
  • 一个自带智能提示、几乎不会写错代码的工具
  • 一个自带可视化面板,能直接看库里数据的工具

安装教程

一、环境准备

开始前确保本地已安装必备环境:

  1. Node.js:v18.18.0+ /v20+(LTS 版本)
  2. 包管理器:npm /yarn/pnpm(本文以 npm 为例)
  3. 数据库:MySQL / PostgreSQL / SQLite

二、创建 NestJS 项目

如果没有NestJS 项目,首先初始化一个全新的 NestJS 项目:

bash 复制代码
# 创建项目 
npx create-next-app@latest 你的项目名称

# 进入项目目录 
cd 你的项目名称

等待依赖安装完成,项目基础结构就搭建好了。

三、安装 Prisma

Prisma 7 分为两部分:

  • prisma:开发依赖,用于生成客户端、执行迁移
  • @prisma/client:生产依赖,项目中操作数据库的核心
bash 复制代码
# 安装 Prisma 7(开发依赖) 
npm install prisma --save-dev

# 安装 Prisma Client(生产依赖) 
npm install @prisma/client --save

这个prisma依赖安装可能会需要一些时间

四、初始化 Prisma

在 Nest 项目中初始化 Prisma,自动生成配置文件:

bash 复制代码
npx prisma init

初始化成功后,项目根目录会生成:

  • prisma 文件夹

    • schema.prisma:Prisma 核心配置文件(数据源、模型、生成器)
  • .env 环境变量文件(如果没有这个文件可以手动添加,注意要跟src在同级目录)

    • 存储数据库连接地址
  • prisma.config.ts 配置文件

    • 指定 schema.prisma 文件路径

    • 配置种子文件、格式化、生成器等全局选项

    • prisma 命令自动读取配置,不用每次手动传参

五、配置 Prisma Schema

1. 配置数据源(database)

打开 prisma/schema.prisma,这是 Prisma 的核心文件,打开会发现系统已经自动生成好了基础的配置,只需按照自己的需求调整一下就好了,在datasource db中选择需要的数据类型,本文用postgresql作为演示。

这是 Prisma 数据库工具 的两个核心配置说明(辅助大家理解每一个配置的含义):

1. generator client

作用:告诉 Prisma 如何生成「Prisma Client」------ 这是你在代码里用来操作数据库的 TypeScript/JavaScript 客户端库。

  • 关键字段说明

1、provider = "prisma-client":指定使用官方的 Prisma Client 生成器(唯一官方选项)。

2、output = "../src/generated/prisma":自定义生成的客户端代码的输出路径(默认是 ./node_modules/.prisma/client,这里改到了项目源码目录,方便本地开发调试)。

  • 执行时机 :运行 npx prisma generate 命令时,Prisma 会根据这个配置,基于你定义的数据模型,生成类型安全的数据库操作代码
2. datasource db

作用:告诉 Prisma 你要连接的数据库类型和连接信息,是 Prisma 与数据库通信的入口。

  • 关键字段说明

provider = "postgresql" :指定数据库类型,支持 mysqlpostgresqlsqlitesqlservermongodb 等(图中标注了常见的 3 种)。

  • 执行时机 :所有 Prisma 命令(prisma migrate devprisma db pushprisma studio 等)都会读取这个配置,来连接目标数据库。

注意:这里不要加url(从环境变量读取数据库连接字符串)这个配置,不然会报错,Prisma 7的url配置已经在 prisma.config.ts 里自动配置好了,不需要再手动配置,这是安装Prisma 7依赖时自动生成的,如果没有这个文件的同学可以按照我这个配置手动添加上去。

2. 修改 .env 数据库连接地址

打开根目录 .env 文件,修改为 PostgreSQL 配置:

env 复制代码
# PostgreSQL 配置
# DATABASE_URL="postgresql://用户名:密码@localhost:5432/数据库名?schema=public"

# SQLite 配置(备用) 
DATABASE_URL="file:./dev.db" 

# MySQL 配置(备用) 
# DATABASE_URL="mysql://用户名:密码@localhost:3306/数据库名?schema=public" 

3. 创建数据模型(Model)

我们以最常用的 User 表为例,在 schema.prisma 末尾添加模型:

模型写完后,后续所有数据库操作都有完整的 TypeScript 类型提示

六、生成 Prisma Client

模型定义完成后,生成 TypeScript 客户端:

bash 复制代码
npx prisma generate

执行成功后,@prisma/client 会自动生成对应模型的类型和方法,直接在代码中调用。 注意:每次修改了数据模型以后,都需要重新运行这个命令,及时更新客户端代码。

七、创建 Prisma 模块与服务(Nest 标准写法)

Nest 推崇模块化,我们需要创建一个 Prisma 全局模块,方便整个项目调用。 (这一步不一定按照我的写法,自己想怎么调用就怎么调用就行,这里只是给个例子,也跟后续的数据库连接无关)

1. 创建 Prisma Service

创建文件 src/prisma/prisma.service.ts

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. 创建 Prisma Module

创建文件 src/prisma/prisma.module.ts

ts 复制代码
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

// 声明为全局模块,无需在其他模块重复导入
@Global()
@Module({
  providers: [PrismaService],
  exports: [PrismaService], // 导出服务,供全项目使用
})
export class PrismaModule {}

3. 注册到根模块

打开 src/app.module.ts,导入 Prisma 模块:

ts 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { PrismaModule } from './prisma/prisma.module';

@Module({
  imports: [PrismaModule], // 注册 Prisma 全局模块
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

至此,Prisma 7 在 NestJS 中配置完成

八、数据库迁移(创建表)

我们定义的 User 模型需要同步到数据库,执行迁移命令:

bash 复制代码
# 生成迁移文件并同步到数据库 
npx prisma migrate dev --name init

执行成功后:

  1. prisma/migrations 生成版本化迁移文件(可追踪表结构变更)
  2. 数据库自动创建 User
  3. PostgreSQL 生成 dev.db 文件

小技巧:执行 npx prisma studio 可打开可视化数据库工具,直接查看 / 编辑数据。

可能出现的错误

说明你的 Docker PostgreSQL 容器没在运行,或者端口没通,Prisma 连不上数据库 所以迁移的时候别忘检查一下Docker 里的 你的项目名称-db 容器启动没,确保打开以后再运行一遍迁移命令

也可以用命令查看Docker的运行状态

1、打开 CMD / PowerShell,执行:

bash 复制代码
docker ps
  • 如果看不到 ai-engine-db 容器,说明容器没运行

  • 如果能看到 ,但状态不是 Up,说明容器异常

  1. 启动容器(如果没运行)
bash 复制代码
# 启动之前创建的容器 
docker start ai-engine-db
  1. 再次检查状态
bash 复制代码
docker ps

具体操作过程如下:

看到 ai-engine-db 状态为 Up,端口 0.0.0.0:5432->5432/tcp,说明数据库正常运行了

容器启动后,回到项目终端,重新执行迁移命令:

bash 复制代码
npx prisma migrate dev --name init

成功后会看到:

dart 复制代码
Your database is now in sync with your schema.

直到没有新的数据需要迁移

补充:如果容器被误删,重新创建

cmd 复制代码
docker run -d --name ai-engine-db -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=ai_engine pgvector/pgvector:pg16

一键重建数据库容器,然后再执行迁移命令。

排查完这些问题

Prisma 7的安装与数据库配置就已经全部成功了

相关推荐
passerby60613 分钟前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角1 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!1 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰2 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi3 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen4 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马4 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒5 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端
乘风gg5 小时前
DeepSeek V4.1 Flash 来了,明天中午 Flash 降价 60%
前端·ai编程·claude
默_笙5 小时前
❗ 给金鱼装记忆(上):从白板到笔记本,AI 的短期记忆生存指南
前端·javascript