概述
Prisma Schema(简称 schema)是配置 Prisma ORM 设置的主要方法。它包含以下部分
- 数据源:指定 Prisma ORM 应连接到的数据源的详细信息(例如 PostgreSQL 数据库)
- 生成器:指定应根据数据模型生成哪些客户端(例如 Prisma Client)
- 数据模型定义:指定您的应用程序模型(每个数据源的数据形状)及其关系
它通常是一个名为 schema.prisma
的单个文件(或具有 .prisma
文件扩展名的多个文件),存储在已定义但可自定义的位置。
想要将您的 schema 分割成多个文件?多文件 Prisma Schema 通过 Prisma ORM 5.15.0 及更高版本中的prismaSchemaFolder
预览功能 支持。
请参阅Prisma schema API 参考,以获取有关 schema 各部分的详细信息。
每当调用 prisma
命令时,CLI 通常会从 schema 中读取一些信息,例如:
prisma generate
:从 Prisma schema 中读取所有上述信息以生成正确的数据源客户端代码(例如 Prisma Client)。prisma migrate dev
:读取数据源和数据模型定义以创建新的迁移。
您还可以在 schema 中使用环境变量 来在调用 CLI 命令时提供配置选项。
示例
以下是 Prisma Schema 的示例,它指定了:
- 一个数据源(PostgreSQL 或 MongoDB)
- 一个生成器(Prisma Client)
- 一个数据模型定义,其中包含两个模型(带有一个关系)和一个
enum
- 几个原生数据类型属性(
@db.VarChar(255)
、@db.ObjectId
)
- 关系型数据库
- MongoDB
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
role Role @default(USER)
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String @db.VarChar(255)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
enum Role {
USER
ADMIN
}
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
email String @unique
name String?
role Role @default(USER)
posts Post[]
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String
author User? @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId
}
enum Role {
USER
ADMIN
}
语法
Prisma Schema 文件使用 Prisma Schema 语言 (PSL) 编写。请参阅数据源、生成器、数据模型定义,当然还有Prisma Schema API 参考页面以获取详细信息和示例。
VS Code
PSL 的语法高亮显示可通过VS Code 扩展(它还允许您自动格式化 Prisma schema 的内容,并用红色波浪线指示语法错误)获得。了解有关在编辑器中设置 Prisma ORM的更多信息。
GitHub
GitHub 上的 PSL 代码片段也可以使用语法高亮显示呈现,方法是使用 .prisma
文件扩展名或在 Markdown 中使用 prisma
注释围栏代码块
```prisma
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
```
从 schema 中访问环境变量
您可以使用环境变量在调用 CLI 命令或运行 Prisma Client 查询时提供配置选项。
可以在 schema 中直接硬编码 URL,但我们不建议这样做,因为它存在安全风险。在 schema 中使用环境变量允许您将机密信息保存在 schema 之外,从而提高 schema 的可移植性,使您能够在不同的环境中使用它。
可以使用 env()
函数访问环境变量
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
您可以在以下位置使用 env()
函数
- 数据源 url
- 生成器二进制目标
有关如何在开发过程中使用 .env
文件的更多信息,请参阅环境变量。
注释
Prisma Schema 语言支持两种类型的注释
// comment
:此注释用于提高读者理解,并且不存在于 schema 的抽象语法树 (AST) 中。/// comment
:这些注释将显示在 schema 的抽象语法树 (AST) 中,作为 AST 节点的描述。然后,工具可以使用这些注释来提供其他信息。所有注释都附加到下一个可用的节点 - 悬空注释 不受支持,也不包含在 AST 中。
以下是一些不同的示例
/// This comment will get attached to the `User` node in the AST
model User {
/// This comment will get attached to the `id` node in the AST
id Int @default(autoincrement())
// This comment is just for you
weight Float /// This comment gets attached to the `weight` node
}
// This comment is just for you. It will not
// show up in the AST.
/// This comment will get attached to the
/// Customer node.
model Customer {}
自动格式化
Prisma ORM 支持自动格式化 .prisma
文件。有两种方法可以格式化 .prisma
文件
- 运行
prisma format
命令。 - 安装Prisma VS Code 扩展并调用VS Code 格式操作 - 手动或在保存时。
没有配置选项 - 格式化规则 是固定的(类似于 Golang 的 gofmt
,但与 Javascript 的 prettier
不同)
格式化规则
配置块按其 =
符号对齐。
block _ {
key = "value"
key2 = 1
long_key = true
}
换行符会重置块对齐
block _ {
key = "value"
key2 = 1
key10 = true
long_key = true
long_key_2 = true
}
字段定义对齐成由 2 个或多个空格分隔的列
block _ {
id String @id
first_name LongNumeric @default
}
多行字段属性与其余字段属性正确对齐
block _ {
id String @id
@default
first_name LongNumeric @default
}
换行符会重置格式化规则
block _ {
id String @id
@default
first_name LongNumeric @default
}
块属性排序到块的末尾
block _ {
key = "value"
@@attribute
}