隨著今天 v5.19.0 版本的釋出,Prisma ORM 引入了一種新的方式來以型別安全的方式編寫原生 SQL 查詢!現在,使用 Prisma ORM,您可以兼得兩全其美:對於大多數查詢而言,它提供了便捷的高階抽象,同時也是原生 SQL 的靈活、型別安全的逃生通道。

TL;DR: 我們讓原生 SQL 完全型別安全
我們相信,透過 Prisma ORM,我們設計出了最佳 API,可以編寫佔大多數應用 95% 的常規 CRUD 查詢!
對於剩下的 5% —— 那些無法透過 Prisma Client API 表達或需要極致效能的複雜查詢 —— 我們提供了一個較低級別的 API 來編寫原生 SQL。然而,這個逃生通道不提供型別安全,開發者也因此錯失了 Prisma ORM 帶來的出色開發體驗(DX),所以我們一直在尋找更好的方法!
隨著今天 Prisma ORM v5.19.0 版本的釋出,我們激動地宣佈 TypedSQL:編寫複雜和高效能查詢的最佳方式。TypedSQL 只是 SQL,但更勝一籌。它是完全型別安全的,提供自動補全,並在您需要編寫原生 SQL 查詢時提供出色的開發體驗。它的工作方式如下:
-
在
.sql檔案中編寫 SQL 查詢,並將其放入prisma/sql目錄中您也可以建立帶引數的 SQL 查詢!
-
使用
prisma generate命令的--sql標誌生成查詢函式 -
從
@prisma/client/sql匯入查詢函式…… 並在新的
$queryRawTyped函式中呼叫它,以獲得完全型別化的結果 😎如果您的 SQL 查詢帶有引數,它們將作為引數傳遞給
$queryRawTyped的查詢函式
Prisma Client API 與 TypedSQL 結合,為 CRUD 操作和高度複雜的查詢提供了最佳體驗。透過這一新增功能,我們希望您將不再需要接觸 SQL 查詢構建器!
實現高效率的高階抽象
原生 SQL 仍然是關係型資料庫中查詢資料最強大、最靈活的方式。但它也存在一些缺點。
原生 SQL 的缺點
如果您以前在 TypeScript 專案中編寫過原生 SQL,您可能知道它並不能提供最佳的開發體驗(DX)
- 編寫 SQL 查詢時沒有自動補全。
- 查詢結果沒有型別安全。
- 編寫和除錯複雜 SQL 查詢的複雜性。
- 開發團隊的 SQL 經驗水平通常各不相同,並非團隊中的每個人都精通 SQL 編寫。
- SQL 使用的資料模型(關係)與 TypeScript(物件)不同,需要進行相互對映;這在模型之間的關係方面尤為普遍,這些關係在 SQL 中透過外部索引鍵表示,但在 TypeScript 中則表示為巢狀物件。
應用程式開發者應該關注資料——而非 SQL
在 Prisma,我們堅信應用程式開發者應該關注資料——而非 SQL。
大多數應用程式開發者編寫的查詢只使用了相當有限的功能集,通常與常見的 CRUD 操作相關,例如*分頁*、*篩選*或*巢狀查詢*。
我們的主要目標是確保應用程式開發者能夠快速獲取所需資料,而無需過多考慮查詢以及資料庫行到程式碼中物件的對映。
使用 Prisma ORM 快速交付
這就是我們構建 Prisma ORM 的原因,旨在為開發者提供一種抽象,提高他們的生產力並幫助他們快速交付!以下是使用 Prisma ORM 的典型工作流程概述。
首先,您在可讀的 schema 中定義資料模型
然後,使用 Prisma CLI 生成(可自定義的)SQL 遷移,並針對您的資料庫執行該遷移。一旦 schema 對映到您的資料庫,您就可以使用 Prisma Client 查詢它
逃生通道:回退到原生 SQL
雖然我們相信這種高階抽象能提高開發者的生產力,但我們也看到許多專案需要編寫原生 SQL 的選項。這通常發生在以下情況:
- Prisma Client API 不夠靈活,無法表達某個特定查詢。
- 查詢需要針對速度進行最佳化。
在這些情況下,Prisma ORM 透過使用 Prisma Client 的 $queryRaw 方法提供了原生 SQL 的逃生通道
這種方法的主要問題是查詢不是型別安全的。如果開發者想要享受到標準 Prisma Client API 帶來的型別安全優勢,他們需要手動編寫此查詢的返回型別,這可能既繁瑣又耗時。另一個問題是,這些手動定義的型別不會隨 schema 更改而自動更新,這引入了另一種出錯的可能性。
雖然有多種方法可以改進使用 Prisma ORM 原生查詢的開發體驗,例如使用 Kysely 查詢構建器擴充套件用於 Prisma Client 或 SafeQL,但我們希望以原生方式解決這個問題。
Prisma ORM 新增功能:TypedSQL 🎉
因此,我們很高興推出 TypedSQL,這是 Prisma ORM 中一個新的工作流程,為原生 SQL 查詢提供型別安全。TypedSQL 的靈感來源於 PgTyped 和 sqlx 等基於類似理念的專案。
有了 TypedSQL,Prisma ORM 現在讓您兩全其美:
- 一種更高階的抽象,可提高開發者的生產力,並能滿足專案中大多數查詢的需求。
- 當您需要直接編寫 SQL 時,一個令人愉悅且型別安全的逃生通道。
它還為擁有不同偏好的開發團隊提供了選擇自己喜歡方法的選項:您的團隊中是否有狂熱的 SQL 愛好者,但也有人對 SQL 避之不及?
現在,Prisma ORM 可以在不犧牲開發體驗或靈活性的前提下,滿足兩類團隊的需求!
立即試用並分享您的反饋
每當您過去不得不使用 $queryRaw 時,TypedSQL 現在是您的新夥伴。
我們將 TypedSQL 視為 SQL 查詢構建器的演進,因為它消除了所有抽象,讓開發者在資料庫查詢方面擁有更大的靈活性。
試用 TypedSQL
我們非常希望您能試用 TypedSQL,並在 X 和 Discord 上告訴我們您的想法!
不要錯過下一篇文章!
訂閱 Prisma 時事通訊