去年 6 月,我们推出了 Prisma 2.0 的第一个预览版。今天,我们很高兴推出第一个正式 Beta 版,以及新的 网站 和更新的 Prisma 2.0 文档。
更新:Prisma 现已准备好投入生产。 阅读公告文章了解更多信息:适用于 Node.js 和 TypeScript 的完整 ORM。

目录
- 使用 Prisma Client 2.0 进行现代数据库访问
- 此版本包含哪些内容?
- 将
prisma2
存储库重命名为prisma
- 重命名
prisma2
CLI - 我目前使用 Prisma 1;我该怎么办?
- 试用 Prisma 2.0 并分享您的反馈
TL;DR
- Prisma 2.0 Beta 版已准备就绪。 借助新的网站和文档,它现在是开始使用 Prisma 的新开发人员的默认选择。
- Prisma 2.0 主要由 Prisma Client 组成,Prisma Client 是 Node.js 和 TypeScript 的自动生成且类型安全的查询构建器。 Prisma Migrate 被认为是实验性的。
prisma/prisma2
存储库已重命名为prisma/prisma
(而之前的 Prisma 1 存储库prisma/prisma
存储库现在称为prisma/prisma1
)。
按照新文档中的 快速入门,在 5 分钟内试用新的 Prisma Client。
使用 Prisma Client 2.0 进行现代数据库访问
新版本的 Prisma Client 是一个用于 Node.js 和 TypeScript 的现代数据库访问库。 它可以作为传统 ORM 和 SQL 查询构建器的替代方案,用于读取和写入数据库中的数据。
要设置它,您需要一个 Prisma schema 文件,并且必须将 Prisma Client 作为依赖项添加到您的项目中
Prisma Client 可以在任何 Node.js 或 TypeScript 后端应用程序中使用(包括无服务器应用程序和微服务)。 这可以是 REST API、GraphQL API、gRPC API 或任何其他需要数据库的东西。
提高数据库的工作效率
Prisma Client 的主要目标是提高应用程序开发人员在使用数据库时的生产力。 它通过提供一个干净的数据访问 API 来实现这一点,该 API 返回纯 JavaScript 对象。
这种方法可以简化对数据库查询的推理,并提高对可预测(和类型安全)查询结果的信心。 以下是 Prisma Client 提供的一些主要好处
- 代码编辑器中的自动完成,无需查找文档
- 以对象方式思考,而不是映射关系数据
- 可以在编译时验证的类型安全数据库查询
- 数据库和应用程序模型的单一事实来源
- 健康的约束,可防止常见的陷阱和反模式
- 一种使正确的事情变得容易的抽象(“成功之坑”)
- 查询而不是类,以避免复杂的模型对象
- 更少的样板代码,因此开发人员可以专注于其应用程序的重要部分
在简介中了解有关 Prisma 如何提高开发人员生产力的更多信息,或者通过查看 网站上的代码示例来了解 Prisma Client API 的味道。
一个“智能”节点模块 🤓
@prisma/client
模块与“传统”节点模块不同。 使用传统的节点模块(例如,lodash
),整个包都会下载到您的 node_modules
目录中,并且只有在您重新安装该包时才会更新。
@prisma/client
节点模块是不同的。 这是一个 “外观包”(基本上是一个存根),不包含任何功能代码。
虽然您确实需要使用 npm install @prisma/client
一次安装它,但是随着您不断发展应用程序,node_modules/@prisma/client
目录中的代码可能会更频繁地更改。 这是因为无论何时您更改 Prisma schema,都需要重新生成 Prisma Client,这会更新 @prisma/client
节点模块中的代码。
因为 node_modules/@prisma/client
目录包含一些专为您的项目量身定制的代码,所以有时被称为“智能节点模块”
即使在纯 JavaScript 中也具有自动完成和类型安全的好处
自动完成对于开发人员来说是一个非常强大的工具。 它允许他们在编辑器中直接探索 API,而不是参考文档。 Prisma Client 将自动完成功能带到您的数据库查询中!
由于 Prisma Client 生成的类型包含在 @prisma/client
模块的 index.d.ts
中,因此此功能不仅适用于 TypeScript 开发人员,而且适用于在纯 JavaScript 中开发应用程序。
部分数据库查询的类型安全
Prisma Client 与其他 ORM 和数据库工具相比的一个主要优势是,它提供了完全类型安全 - 即使是“部分”数据库查询(即,当您仅查询模型的字段子集或包含 关系时)。
例如,考虑以下 Prisma Client 查询(您可以切换选项卡以查看相应的 Prisma 模型)
请注意,生成的 usersWithPartialPosts
将被静态类型化为
这意味着当您输入错误或意外访问未从数据库请求的属性时,TypeScript 将捕获任何错误!
开始使用
开始使用 Prisma Client 的最佳方法是按照文档中的 快速入门进行操作
快速入门(5 分钟)
或者,你可以
此版本包含哪些内容?
Prisma 2.0 Beta 版本包含以下工具
- Prisma Client: 为 Node.js & TypeScript 自动生成、类型安全的查询构建器
- Prisma Migrate (实验性): 声明式 schema 迁移工具
- Prisma Studio (实验性): 用于查看和编辑数据库中数据的 GUI
按照新文档中的 快速入门,在 5 分钟内试用新的 Prisma Client。
注意: 在发行说明中了解有关 Beta 版本的更多信息。
将 prisma2
仓库重命名为 prisma
自首次发布以来,Prisma 2.0 的主仓库一直被称为 prisma2
。
由于 Prisma 2.0 现在是刚开始使用 Prisma 的开发人员的默认选择,因此 Prisma 仓库已重命名如下
prisma/prisma2
仓库已重命名为prisma/prisma
prisma/prisma
仓库已重命名为prisma/prisma1
重命名 prisma2
CLI
在预览期间,Prisma 2.0 的 CLI 使用 prisma2
命令调用。 由于 Prisma 2.0 是刚开始使用 Prisma 的新开发人员的默认选择,因此该命令已更改为仅 prisma
。现有的 Prisma 1 的 prisma
命令已重命名为 prisma1
。
另外,请注意 npm 包的安装发生了变化
Prisma 版本 | 旧的 CLI 命令 | 新的 CLI 命令 | 旧的 npm 包名称 | 新的 npm 包名称 |
---|---|---|---|---|
2.0 | prisma2 | prisma | prisma2 | @prisma/cli |
1.X | prisma | prisma1 | prisma | prisma1 |
给当前 Prisma 1 用户的注意事项
如果您当前正在使用带有 prisma
命令的 Prisma 1,则可以像以前一样继续使用它。如果您想升级到 Prisma 2.0,建议卸载当前的 prisma
安装,并在需要它们的项目中本地安装新的 CLI 版本
prisma2
npm 包已弃用
prisma2
npm 包现已弃用。 为防止安装过程中出现混淆,现在尝试安装它时会输出以下内容
我目前使用 Prisma 1;我应该怎么做?
首先,我们要非常感谢所有现有的 Prisma 1 用户! 🙏 我们非常感谢在 GitHub 和 Slack 上形成的具有支持性和积极性的社区!
Prisma 2.0 与 Prisma 1 相比如何?
与 Prisma 1 相比,Prisma 2.0 带来了一些变化。 以下是主要区别的概要
- Prisma 2.0 不需要托管数据库代理服务器(即 Prisma 服务器)。
- Prisma 2.0 不再公开“数据库的 GraphQL API”,而仅允许通过 Prisma Client API 进行编程访问。
- Prisma 2.0 使 Prisma 1 的功能更加模块化,并将其拆分为专用工具
- Prisma Client:Prisma client 1.0 的改进版本
- Prisma Migrate:数据建模和迁移(以前是
prisma deploy
)。
- 更强大的自省功能允许将 Prisma 2.0 连接到任何现有数据库。
- Prisma 1 数据模型和
prisma.yml
已合并到 Prisma schema 中。 - Prisma 2.0 使用自己的 建模语言,而不是基于 GraphQL SDL。
- 您可以使用 Nexus 或您选择的任何其他 GraphQL 库,使用 Prisma 构建 GraphQL 服务器。
如何访问 Prisma 1 文档?
您可以通过将版本号附加到 https://prisma.org.cn/docs
来继续访问 Prisma 1 文档的特定版本。 例如,要查看 Prisma 1.34 版本的文档,您可以访问 https://v1.prisma.io/docs/1.34/
。
Prisma 1 示例已移至 prisma1-examples
仓库。
我应该升级吗?
您是否应该升级取决于您项目的上下文。 通常,一个主要考虑因素是 Prisma Migrate 仍然是实验性的。 这意味着您可能需要使用 SQL 或其他迁移工具对数据库 schema 进行任何未来的调整。
另外,请注意,我们将在未来几周内为升级过程整理一份 升级指南以及专用工具。 因此,如果您确实想升级,即使 Prisma Migrate 尚未准备好,也可能值得等到这些资源到位。
我将 Prisma 1 与 Prisma client 和 nexus-prisma
一起使用,我应该升级吗?
当然可以将运行在 Prisma 1 和 nexus-prisma
上的项目升级到 Prisma 2.0。
如果您决定升级,请注意在升级到 Prisma 2.0 后更改数据库 schema 将需要使用 SQL 或第三方迁移工具运行迁移。 另请注意,nexus-prisma
API 随 Prisma 2.0 发生变化。
这是升级所需步骤的概要
- 在您的项目中安装 Prisma 2.0 CLI:
npm install @prisma/cli --save-dev
- 创建一个具有
datasource
的 Prisma schema,该 schema 指向您的 Prisma 1 数据库 - 自省您的 Prisma 1 数据库以获取您的数据模型:
npx prisma introspect
- 安装 Prisma Client npm 包:
npm install @prisma/client
- 生成 Prisma Client JS:
npx prisma generate
- 升级到最新版本的
nexus-prisma
并调整您的解析器。
注意: 您可以在用于部署 Prisma 服务器的 Docker Compose 文件中找到您的数据库凭据。 这些凭据是组成 Prisma 2.0 的 连接 URL 所必需的。
我将 Prisma 1 与 Prisma client(没有 nexus-prisma
) 一起使用,我应该升级吗?
当然可以升级运行在 Prisma 1 上的项目。
如果您决定升级,请注意在升级到 Prisma 2.0 后更改数据库 schema 将需要使用 SQL 或第三方迁移工具运行迁移。 这是升级所需步骤的概要
- 导航到您的项目目录
- 在您的项目中安装 Prisma 2.0 CLI:
npm install @prisma/cli --save-dev
- 创建一个具有
datasource
的 Prisma schema,该 schema 指向您的 Prisma 1 数据库 - 自省您的 Prisma 1 数据库以获取您的数据模型:
npx prisma introspect
- 安装 Prisma Client npm 包:
npm install @prisma/client
- 生成 Prisma Client JS:
npx prisma generate
- 将您之前对 Prisma client 1.0 的使用更新为新的 Prisma Client 2.0
注意: 您可以在用于部署 Prisma 服务器的 Docker Compose 文件中找到您的数据库凭据。 这些凭据是组成 Prisma 2.0 的 连接 URL 所必需的。
我将 Prisma 1 与 prisma-binding
一起使用,我应该升级吗?
当然可以将运行在 Prisma 1 和 prisma-binding
上的项目升级到 Prisma 2.0。
如果您决定升级,请注意在升级到 Prisma 2.0 后更改数据库 schema 将需要使用 SQL 或第三方迁移工具运行迁移。
另外,请注意使用 Prisma 2.0 实现 GraphQL 解析器的方式发生了变化。 由于 Prisma 2.0 不公开数据库的 GraphQL API,因此您不能再使用 prisma-binding
npm 包。 这主要与实现关系有关,现在需要以类型级别实现这些解析器。 要了解为什么这是必要的,请务必阅读这篇关于 GraphQL schema 基础知识的文章。
这是升级所需步骤的概要
- 在您的项目中安装 Prisma 2.0 CLI:
npm install @prisma/cli --save-dev
- 创建一个具有
datasource
的 Prisma schema,该 schema 指向您的 Prisma 1 数据库 - 自省您的 Prisma 1 数据库以获取您的数据模型:
npx prisma introspect
- 安装 Prisma Client npm 包:
npm install @prisma/client
- 生成 Prisma Client JS:
npx prisma generate
- 调整您的解析器以使用 Prisma Client 而不是
prisma-binding
如果您想切换到 代码优先 方法,请查看 GraphQL Nexus。
注意: 您可以在用于部署 Prisma 服务器的 Docker Compose 文件中找到您的数据库凭据。 这些凭据是组成 Prisma 2.0 的 连接 URL 所必需的。
试用 Prisma 2.0 并分享您的反馈
我们很高兴终于可以分享 Prisma 2.0 的 Beta 版本,并且迫不及待地想看看大家用它构建什么。
开始使用 Prisma 2.0
如果您想留下反馈、分享想法、创建功能请求或提交错误报告,请在 GitHub 上的(已重命名的)prisma
仓库中进行,并加入 Prisma Slack 上的(已重命名)#prisma2-beta
频道!
不要错过下一篇文章!
注册 Prisma 新闻通讯