Prisma 使用笔记

Prisma 是一个 TypeScript 语言支持良好的 ORM 框架,具备良好的数据模型、自动迁移、类型安全和自动完成功能。

官网: https://www.prisma.io/

安装配置

安装依赖

https://www.prisma.io/docs/getting-started/quickstart

prisma 是 cli 工具,@prisma/client 是 api 使用的包。

npm i -D prisma
npm i -S @prisma/client

VSCode 需要安装对应的插件。

初始化项目

使用脚本初始化,它会创建 prisma 目录,里面有一个 schema.prisma 文件。

npx prisma init --datasource-provider mysql

数据源配置

指定使用的数据库类型为 mysql

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

在生成的 .env 文件中配置数据库连接信息

DATABASE_URL="mysql://账号:密码@地址:3306/数据库名"

可以通过在数据库连接 URL 中显式设置 connection_limit 参数来指定连接数

DATABASE_URL="mysql://账号:密码@地址:3306/数据库名?connection_limit=5"

data model 数据建模

Prisma模式提供了一种直观的数据建模方法。将以下模型添加到 prisma/schema.prisma 文件。

模型可用于表示基础数据库中的表、作为生成的Prisma客户端API的基础等。

定义字段

模型定义语法,包括字段名称、字段类型、修饰符、属性等。

https://www.prisma.io/docs/orm/prisma-schema/data-model/models

字段类型在,支持 String、Boolean、Int、BigInt、Float、Decimal、DateTime、Json等。

https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#model-field-scalar-types

修饰符:

  • ? 使用 ? 类型修饰可选类型
  • [] 表示数组

属性,包含 @id(单字段主键)、@@id(复合字段主键)、@default、@unique、@@unique、@@index、@relation等。

https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#attributes

定义关联关系

https://www.prisma.io/docs/concepts/components/prisma-schema/relations

  • 一对一
  • 一对多
  • 多对多,有显式和隐式两种,显示可自行指定关联表结构,查询的数据会存在两层嵌套。

隐式多对多可减少嵌套,但关联表需要使用 prisma 内部的规则。另外还有个缺点是不用额外扩充字段了。

Collection 和 Diary 隐式关联,根据字典序:

  • 默认表名:_CollectionToDiary,可通过 @relation("MyRelation") 自定义,定义后表名为 _MyRelation
  • A 代表 Collection
  • B 代表 Diary

自动创建关联关系,可先定义关系:

model Diary {
  user User[]
}

然后 schema 文件会报错,通过编辑器选择格式化可自动补全信息。

默认会生成外键,可在 datasource db 中设置关系模式 relationMode 为 prisma,这模拟了Prisma 客户端中的关系,而不是创建外键索引。

https://www.prisma.io/docs/concepts/components/prisma-schema/relations/relation-mode#which-referential-actions-are-emulated

prisma 关系模式不使用外键,需要如在关联的表增加 @@index 索引,提升查询效果。

数据库迁移

数据库迁移入门: https://www.prisma.io/docs/orm/prisma-migrate/getting-started

修改 schema.prisma 的模型,执行 migrate 命令,生成迁移文件:

npx prisma migrate dev --name new-field

协同开发时,拉取代码后,执行更新迁移历史记录到数据库:

npx prisma migrate dev

迁移部署命令:

npx prisma migrate deploy

其他迁移相关参考链接:

Prisma Client

https://www.prisma.io/docs/orm/reference/prisma-client-reference

创建客户端对象

创建 prisma 客户端,并导出即可使用,也可以传入配置参数。

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

框架集成

Nest.js 集成:

Next.js 集成:

生成 Prisma 客户端代码

执行 prisma migrate dev 时,会同步数据库,也会生成 client 代码。

如果不使用迁移系统,只把 Prisma 当做一个 ORM 客户端,也可以单独更新 Prisma 客户端代码:

npx prisma generate

常用增删改查操作文档

操作使用在文档中写得比较清晰,按说明使用即可。

单表操作 https://www.prisma.io/docs/concepts/components/prisma-client/crud

联表操作 https://www.prisma.io/docs/concepts/components/prisma-client/relation-queries

联表操作是在增删改查操作基础上的,需结合单表操作文档使用。

本文收录于专栏
收集一些好用的前端开源库,主要是 npm 包