2020 年 3 月 31 日

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

去年 6 月,我们推出了 Prisma 2.0 的首个 Preview 版本。今天,我们很高兴发布首个官方 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 schema 文件,并且必须将 Prisma Client 作为依赖项添加到您的项目中

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

提高数据库工作效率

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

这种方法可以更简单地推理数据库查询,并提高对可预测(和类型安全)查询结果的信心。以下是 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

在 Preview 期间,Prisma 2.0 的 CLI 是使用 prisma2 命令调用的。由于 Prisma 2.0 是开始使用 Prisma 的新开发人员的默认选择,因此该命令已更改为仅 prisma。Prisma 1 的现有 prisma 命令已重命名为 prisma1

另请注意,npm 包的安装方式已更改

Prisma 版本旧的 CLI 命令新的 CLI 命令旧的 npm 包名称新的 npm 包名称
2.0prisma2prismaprisma2@prisma/cli
1.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 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 datamodel 和 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 数据库以获取您的 datamodel: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 数据库以获取您的 datamodel: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 schemas 基础知识的文章。

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

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

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

不要错过下一篇文章!

注册 Prisma Newsletter