跳至主要内容

升级到 Prisma ORM 3

如果您从早期版本(任何 2.x 版本)升级,Prisma ORM 3 引入了许多 **重大变更**,因此,了解此升级可能对您的应用程序造成的影响并进行必要的调整以确保顺利过渡非常重要。

以下列出了重大变更以及如何处理它们。

重大变更

引用操作

3.x 版本中引入了引用操作,它移除了 Prisma 客户端中之前在运行时阻止级联删除的安全网。

因此,根据您用于处理应用程序的工作流程,您可能会受到影响。我们建议您检查您的架构并决定是否需要显式定义引用操作。

请查看 引用操作升级路径,了解如何继续。

命名约束

我们更改了 Prisma ORM 用于命名约束和索引的约定。我们还在 PSL 中引入了 map 属性(数据库级名称)和 name 属性(Prisma 客户端 API 名称)之间的明确区分,以显式控制如何在 Prisma 架构中定义约束。

这意味着当您运行 Prisma migratedb pull 时,您会注意到影响,因为它们将遵循此新约定。我们建议您调整您的架构以适当地反映您的约束和索引的名称。

您可以查看 命名约束升级路径,以了解如何继续。

$queryRaw

从 3.x 版本开始,$queryRaw 方法现在仅支持模板文字。

这意味着如果您的应用程序依赖于使用 *字符串* 的 $queryRaw 调用,则这些调用将 **不再** 工作。我们建议您尽可能使用模板文字以确保安全,或者在仔细转义查询以防止 SQL 注入后,使用 $queryRawUnsafe

您可以在文档的 原始数据库访问 部分中了解有关新的 $queryRaw$queryRawUnsafe 方法的更多信息。

Json Null 等效性

您无法通过 null 值过滤 Json 字段。 查看此 GitHub 问题。这是因为 { equals: null } 检查数据库中的列值是否为 NULL,而不是检查列中的 JSON 值是否等于 null

为了解决此问题,我们决定将 Json 字段上的 null 分割成 JsonNullDbNullAnyNull

  • **JsonNull**: 选择 JSON 中的 null 值。
  • **DbNull**: 选择数据库中的 NULL 值。
  • **AnyNull**: 选择 null JSON 值和 NULL 数据库值。

在您的 Prisma 架构中给出以下模型

model Log {
id Int @id
meta Json
}

从 3.0.1 开始,如果您尝试在 Json 字段上过滤 null 值,您将看到 TypeError

prisma.log.findMany({
where: {
data: {
meta: {
equals: null
^ TypeError: Type 'null' is not assignable to type
}
},
},
});

为了解决此问题,您将导入并使用其中一种新的 null 类型

import { Prisma } from '@prisma/client'

prisma.log.findMany({
where: {
data: {
meta: {
equals: Prisma.AnyNull,
},
},
},
})

这也适用于 createupdateupsert。要将 null 值插入 Json 字段,您可以编写

import { Prisma } from '@prisma/client'

prisma.log.create({
data: {
meta: Prisma.JsonNull,
},
})

要将数据库 NULL 插入 Json 字段,您可以编写

import { Prisma } from '@prisma/client'

prisma.log.create({
data: {
meta: Prisma.DbNull,
},
})
警告

此 API 变更不适用于 MongoDB 连接器,因为 JSON null 与数据库 NULL 之间没有区别。

它们也不适用于 array_contains 运算符,因为 JSON 数组中只能存在 JSON null 值。由于 JSON 数组中不能存在数据库 NULL,因此 { array_contains: null } 不含糊。

特定升级路径

prisma@prisma/client 包升级到 Prisma ORM 3

要从 2.x 版本升级到 3.x 版本,您需要更新 prisma@prisma/client 包。prisma@prisma/client 包都使用插入符号 ^ 安装在其版本号中,以防止出现重大变更。

要忽略插入符号 ^ 并跨主要版本升级,您可以在使用 npmyarn 升级时使用 @3 标签。

危险

在升级之前,检查每个 **重大变更** 以查看升级可能对您的应用程序造成的影响。

npm install prisma@3 @prisma/client@3