Prisma入门

本文最后更新于:7 个月前

Prisma重点概念介绍、schema.prisma文件解读、Prisma使用方法

Prisma入门

一、概述

核心工具简介

  • Prisma Schema,描述数据模型
  • Prisma Client,操作API

prisma命令介绍

  • prisma generate:从 Prisma schema 读取 所有 上述信息以生成正确的数据源客户端代码(例如 Prisma Client)
  • prisma migrate dev:读取数据源和数据模型定义以创建一个新的迁移。

二、.prisma文件解读

下面是一个schema.prisma文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 数据源:声明链接数据库信息
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

# 生成器:指明基于数据模型生成的客户端
generator client {
provider = "prisma-client-js"
}

# 数据模型定义:指明数据模型和它们之间的关系
model Post {
# 字段结构包括:字段名,字段类型,类型修饰(可选),属性(可选)
id Int @id @default(autoincrement())
title String
content String? @map("post_content") # @map 修改字段名映射
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

# 命名规范:大驼峰
# 模型内部的字段:小驼峰
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

model

  • 映射到数据库的 (关系型数据库,例如 PostgreSQL)或 集合 (MongoDB)

  • 构成 Prisma Client API查询 的基础

  • model命名格式规范:大驼峰

    如果使用该命名规范,无法和数据库表名匹配时(有些数据库表不支持大驼峰,而是下划线或复数形式),可以使用@@map()函数属性进行映射

    1
    2
    3
    4
    5
    model Comment {
    // Fields

    @@map("comments")
    }
  • model中 字段的命名规范格式:小驼峰

    如果与数据库表中的字段名称不匹配,可以使用@map()进行映射关联

    1
    2
    3
    4
    5
    model Post {
    // Fields

    content String? @map("post_content") # @map 修改字段名映射
    }

字段类型

字段类型分两类:标量类型、模型类型。参考链接:字段标量类型 - Prisma 中文文档

  • 标量类型(也称标量字段)

「datasource数据源连接器」 决定每个 Prisma 标量类型映射到的 「数据库原生类型」。

「generator生成器」 决定这些类型映射到 「目标编程语言中的什么类型」。

标量类型 对应MySQL 备注
String varchar(191)
Boolean TINYINT(1)
Int INT
BigInt INT
Float DOUBLE
Decimal DECIMAL(65,30)
DateTime DATETIME(3) Prisma Client 以 ISO 8601 格式字符串的形式返回所有 DateTime
Json JSON JSON 对象
Bytes LONGBLOB
Unsupported 允许您在 Prisma 模式中表示 Prisma Client 不支持的数据类型
enum 枚举类型,注:SQL Server和SQLite不支持
  • 模型类型(也称关系字段),一个关系字段的类型是另一个模型

类型修饰

类型修饰有 ? [] 两种语法,分别表示可选、数组

1
2
3
4
model User {
name String?
posts Post[]
}

属性描述

常用的属性描述如下表

属性 说明 示例
@id 数据库主键
@@id 复合主键
@default() 设置默认值 @default(false)
@default(autoincrement()),注意:MongoDB 连接器 不支持 autoincrement()
@unique 字段唯一
@relation 设置关联
@map() 设置映射 content String? @map("post_content") 指定表中映射的Key
@createdAt() 创建时间
@updatadAt() 更新时间

.prisma文件位置

Prisma CLI 在以下位置查找 Prisma schema 文件,顺序如下:

  1. --schema flag 指明的位置,当你调用 introspectgeneratemigratestudio 时可用:

    1
    $prisma generate --schema=./alternative/schema.prisma
  2. package.json 文件指明的位置(2.7.0 及更高版本):

    1
    2
    3
    "prisma": {
    "schema": "db/schema.prisma"
    }
  3. 默认位置:

    • ./prisma/schema.prisma
    • ./schema.prisma

    注:如果不显式指定schema.prisma文件位置的话,Prisma CLI会自动到当前目录及当前目录的子目录中去寻找schema.prisma文件

三、如何使用

如何初始化模型

前置工作,安装依赖

1
2
3
npm install typescript ts-node @types/node --save-dev
npx tsc --init # 如果已经有tsconfig.json 可以省略这一步
npm install prisma --save-dev

创建模型

1
2
npx prisma init --datasource-provider sqlite	# 在项目根目录下创建一个prisma目录,并生成schema.prisma文件
# 也可以手动创建目录和文件

然后再schema.prisma文件进行配置定义,完成后执行

1
2
3
4
npx prisma migrate dev --name init
# 这条命令做了两件事:
#(1)创建了一个新的SQL迁移文件
#(2)运行这个SQL迁移文件,即在真正的数据库中创建表

然后就可以通过 Prisma Client 对数据库进行操作了

1
2
3
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// 在这里完成操作

如何更新模型

Schema.prisma数据模型发生变化之后,重新使用migrate命令同步到数据库

1
prisma migrate dev --name change_model	# 最后一个参数是此次迁移的name,可以在/prisma/migrations/目录下看到迁移历史

参阅链接

精读《Prisma 的使用》 - 掘金 (juejin.cn)


Prisma入门
http://timegogo.top/2023/07/31/后端/Prisma入门/
作者
丘智聪
发布于
2023年7月31日
更新于
2023年8月1日
许可协议