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 的主要目標是提高應用程式開發人員在使用資料庫時的生產力。它透過提供一個乾淨的資料存取 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 結構描述時,您都需要重新產生 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/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 資料模型和 prisma.yml 已合併到 Prisma 結構描述 中。
  • Prisma 2.0 使用自己的 建模語言,而不是基於 GraphQL SDL。
  • 您可以使用 Nexus 或任何其他您選擇的 GraphQL 函式庫,使用 Prisma 建置 GraphQL 伺服器。

我如何存取 Prisma 1 文件?

您可以透過將版本號碼附加到 https://prisma.dev.org.tw/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 結構描述,其中包含指向您的 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 後變更您的資料庫結構描述,將需要使用 SQL 或第三方遷移工具執行遷移。以下是升級所需步驟的高階概述

  1. 導覽至您的專案目錄
  2. 在您的專案中安裝 Prisma 2.0 CLI:npm install @prisma/cli --save-dev
  3. 建立一個 Prisma 結構描述,其中包含指向您的 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 後變更您的資料庫結構描述,將需要使用 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 結構描述,其中包含指向您的 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

如果您想留下意見回饋、分享想法、建立功能請求或提交錯誤報告,請在 GitHub 上的(已重新命名)prisma 儲存庫中執行此操作,並加入 Prisma Slack 上的(已重新命名)#prisma2-beta 頻道!

不要錯過下一篇文章!

訂閱 Prisma 電子報