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 测试版已准备就绪。凭借全新的网站和文档,它现在是新开发者开始使用 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 schema 文件,并且必须将 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 schema 进行更改时,都需要重新生成 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 (实验性):声明式 schema 迁移工具
  • 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 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 发生了变化。

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

  1. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  2. 创建一个 Prisma schema,其中包含指向您的 Prisma 1 数据库的 datasource
  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 后更改数据库 schema 将需要使用 SQL 或第三方迁移工具运行迁移。以下是升级所需步骤的高级概述:

  1. 导航到您的项目目录
  2. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  3. 创建一个 Prisma schema,其中包含指向您的 Prisma 1 数据库的 datasource
  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 后更改数据库 schema 将需要使用 SQL 或第三方迁移工具运行迁移。

此外,请注意,您的 GraphQL 解析器实现方式随 Prisma 2.0 而改变。由于 Prisma 2.0 不再暴露用于数据库的 GraphQL API,您将无法再使用 prisma-binding npm 包。这主要与实现 *关联* 有关,现在这些关联的解析器需要在 *类型层面* 实现。要了解更多关于此必要性的信息,请务必阅读这篇关于GraphQL schema 基础知识的文章。

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

  1. 在您的项目中安装 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  2. 创建一个 Prisma schema,其中包含指向您的 Prisma 1 数据库的 datasource
  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

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

不要错过下一篇文章!

订阅 Prisma 新闻邮件

© . All rights reserved.