2020年3月31日

Prisma 2.0 进入 Beta 版:使用 Prisma Client 实现类型安全的数据库访问

我们于去年六月推出了 Prisma 2.0 的第一个预览版。今天,我们很高兴发布第一个官方 Beta 版,同时推出新网站和更新的 Prisma 2.0 文档

更新: Prisma 现已可用于生产环境。请阅读发布文章了解更多信息:Node.js 和 TypeScript 的完整 ORM

Prisma 2.0 is now in beta

目录


TL;DR

  • Prisma 2.0 Beta 版已就绪。随着新网站和文档的推出,它现在是新开发者开始使用 Prisma 的默认选择。
  • Prisma 2.0 主要由 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 模式文件,并且必须将 Prisma Client 添加到您的项目依赖项中。

Prisma Client 可用于任何 Node.js 或 TypeScript 后端应用程序(包括无服务器应用程序和微服务)。这可以是REST APIGraphQL API、gRPC API 或任何其他需要数据库的应用程序。

使用数据库提高生产力

Prisma Client 的主要目标是提高应用程序开发人员在处理数据库时的生产力。它通过提供一个返回纯 JavaScript 对象的干净数据访问 API 来实现这一点。

这种方法使得数据库查询的推理更简单,并通过可预测(且类型安全)的查询结果增加了信心。以下是 Prisma Client 提供的几个主要好处:

  • 代码编辑器中的自动补全,无需查阅文档
  • 以对象思维取代映射关系数据
  • 类型安全的数据库查询,可在编译时验证
  • 数据库和应用程序模型的单一事实来源
  • 健康的约束,防止常见陷阱和反模式
  • 一个让正确的事情变得简单的抽象(“成功之路”)
  • 查询而非类,以避免复杂的模型对象
  • 减少样板代码,让开发者专注于应用程序的重要部分

介绍中了解更多关于 Prisma 如何提高开发者生产力的信息,或者通过查看网站上的代码示例,体验 Prisma Client API。

一个“智能”的 Node 模块 🤓

@prisma/client 模块与“传统”的 node 模块有所不同。对于传统 node 模块(例如 lodash),整个包会下载到您的 node_modules 目录中,并且只有当您重新安装该包时才会更新。

@prisma/client node 模块有所不同。它是一个“门面包”(基本上是一个存根),不包含任何功能代码。

虽然您确实需要一次性使用 npm install @prisma/client 安装它,但随着您的应用程序的演变,node_modules/@prisma/client 目录中的代码可能会更频繁地更改。这是因为每当您更改 Prisma 模式时,都需要重新生成 Prisma Client,这会更新 @prisma/client node 模块中的代码。

因为 node_modules/@prisma/client 目录包含一些针对您的项目的代码,所以它有时被称为“智能 Node 模块”。

Prisma smart node module

即使在纯 JavaScript 中也能受益于自动补全和类型安全

自动补全是开发者极其强大的工具。它允许他们直接在编辑器中探索 API,而无需参考文档。Prisma Client 将自动补全带到您的数据库查询中!

得益于 Prisma Client 生成的类型,这些类型包含在 @prisma/client 模块的 index.d.ts 中,此功能不仅适用于 TypeScript 开发者,也适用于开发纯 JavaScript 应用程序。

部分数据库查询的类型安全

与其他 ORM 和数据库工具相比,Prisma Client 的一个主要优势在于它提供了完全的类型安全——即使对于“部分”数据库查询(即,当您仅查询模型字段的子集或包含关系时)。

举个例子,考虑这个 Prisma Client 查询(您可以切换选项卡查看相应的Prisma 模型

请注意,结果 usersWithPartialPosts 将被静态类型

这意味着当您打错字或意外访问未从数据库请求的属性时,TypeScript 将捕获任何错误!

开始

开始使用 Prisma Client 的最佳方式是遵循文档中的快速入门


快速入门 (5 分钟)

或者,您可以

此版本包含什么?

Prisma 2.0 Beta 版附带以下工具

  • Prisma Client:自动生成、类型安全的 Node.js 和 TypeScript 查询构建器
  • Prisma Migrate实验性):声明式模式迁移工具
  • Prisma Studio实验性):用于查看和编辑数据库数据的 GUI

通过遵循新文档中的快速入门,在5分钟内试用新的 Prisma Client。

注意:请在发布说明中了解更多关于 Beta 版的信息。

prisma2 仓库重命名为 prisma

自最初发布以来,Prisma 2.0 的主要存储库一直被称为 prisma2

由于 Prisma 2.0 现在是开始使用 Prisma 的开发者的默认选择,Prisma 仓库已重命名如下:

重命名 prisma2 CLI

在预览期间,Prisma 2.0 的 CLI 使用 prisma2 命令调用。随着 Prisma 2.0 成为新开发者开始使用 Prisma 的默认选择,该命令更改为 prisma。Prisma 1 的现有 prisma 命令重命名为 prisma1

另外,请注意 npm 包的安装方式有所改变

Prisma 版本旧 CLI 命令新 CLI 命令旧 npm 包名新 npm 包名2.0prisma2prismaprisma2@prisma/cli1.Xprismaprisma1prismaprisma1

给当前 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 2.0 相对于 Prisma 1 有多项变化。以下是主要区别的高层概述:

  • 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 模式中。
  • Prisma 2.0 使用自己的建模语言,而不是基于 GraphQL SDL。
  • 您可以使用 Nexus 或任何其他您选择的 GraphQL 库构建 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 或其他迁移工具对数据库模式进行任何未来的调整。

另外,请注意,我们将在未来几周内编制一份升级指南以及专用工具以进行升级过程。因此,如果您确实想升级,尽管 Prisma Migrate 尚未准备好,等待这些资源到位可能值得。

我使用 Prisma 1 结合 Prisma client 和 nexus-prisma,我应该升级吗?

将运行在 Prisma 1 和 nexus-prisma 上的项目升级到 Prisma 2.0 肯定是可行的。

如果您决定升级,请注意,在升级到 Prisma 2.0 后更改数据库模式,将需要使用 SQL 或第三方迁移工具运行迁移。另外,请注意 nexus-prisma API 会随 Prisma 2.0 而更改。

以下是升级所需的步骤概览:

  1. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  2. 创建一个 Prisma 模式文件,其中 datasource 指向您的 Prisma 1 数据库。
  3. 内省您的 Prisma 1 数据库以获取数据模型:npx prisma introspect
  4. 安装 Prisma Client npm 包:npm install @prisma/client
  5. 生成 Prisma Client JS:npx prisma generate
  6. 升级到最新版本的 nexus-prisma 并调整您的解析器。

注意:您可以在用于部署 Prisma 服务器的 Docker Compose 文件中找到您的数据库凭据。这些凭据是为 Prisma 2.0 构成连接 URL 所必需的。

我使用 Prisma 1 结合 Prisma client(不带 nexus-prisma),我应该升级吗?

升级正在运行 Prisma 1 的项目当然是可行的。

如果您决定升级,请注意,在升级到 Prisma 2.0 后更改数据库模式,将需要使用 SQL 或第三方迁移工具运行迁移。以下是升级所需步骤的高级概述:

  1. 导航到您的项目目录
  2. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  3. 创建一个 Prisma 模式文件,其中 datasource 指向您的 Prisma 1 数据库。
  4. 内省您的 Prisma 1 数据库以获取数据模型:npx prisma introspect
  5. 安装 Prisma Client npm 包:npm install @prisma/client
  6. 生成 Prisma Client JS:npx prisma generate
  7. 将您之前使用的 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 后更改数据库模式,将需要使用 SQL 或第三方迁移工具运行迁移。

此外,请注意,GraphQL 解析器的实现方式在 Prisma 2.0 中有所改变。由于 Prisma 2.0 不再暴露数据库的 GraphQL API,您将无法再使用 prisma-binding npm 包。这主要与实现关系相关,现在这些关系的解析器需要在类型级别上实现。要了解更多关于为什么这很有必要的信息,请务必阅读这篇关于 GraphQL 模式基础知识的文章。

以下是升级所需的步骤概览:

  1. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  2. 创建一个 Prisma 模式文件,其中 datasource 指向您的 Prisma 1 数据库。
  3. 内省您的 Prisma 1 数据库以获取数据模型:npx prisma introspect
  4. 安装 Prisma Client npm 包:npm install @prisma/client
  5. 生成 Prisma Client JS:npx prisma generate
  6. 调整您的解析器,使用 Prisma Client 替代 prisma-binding

如果您想转向代码优先的方法,请查看GraphQL Nexus

注意:您可以在用于部署 Prisma 服务器的 Docker Compose 文件中找到您的数据库凭据。这些凭据是为 Prisma 2.0 构成连接 URL 所必需的。

尝试 Prisma 2.0 并分享您的反馈

我们非常高兴终于分享了 Prisma 2.0 的 Beta 版本,并迫不及待地想看到大家用它构建出什么。


开始使用 Prisma 2.0

如果您想留下反馈、分享想法、创建功能请求或提交错误报告,请在 (已重命名的) prisma GitHub 仓库中进行,并加入 (已重命名的) #prisma2-beta 频道在 Prisma Slack

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.