跳到主要內容

編寫您自己的 SQL

雖然 Prisma Client API 旨在讓您的所有資料庫查詢直觀、類型安全且方便,但在某些情況下,原始 SQL 仍然是完成工作的最佳工具。

發生這種情況的原因有很多,例如需要最佳化特定查詢的效能,或者因為您的資料需求無法完全透過 Prisma Client 的查詢 API 來表達。

在大多數情況下,TypedSQL 允許您以 SQL 表達您的查詢,同時仍然受益於 Prisma Client 出色的使用者體驗。然而,由於 TypedSQL 是靜態類型,因此它可能無法處理某些情況,例如動態產生的 WHERE 子句。在這些情況下,您將需要使用 $queryRaw$executeRaw,或其不安全的對應項。

使用 Prisma Client 和 TypedSQL 編寫類型安全的查詢

資訊

TypedSQL 在 Prisma ORM 5.19.0 及更高版本中可用。對於先前版本中的原始資料庫存取,請參閱我們的原始查詢文件

什麼是 TypedSQL?

TypedSQL 是 Prisma ORM 的一項新功能,可讓您在 .sql 檔案中編寫查詢,同時仍然享受 Prisma Client 出色的開發人員體驗。您可以編寫您熟悉的程式碼,並受益於完全類型化的輸入和輸出。

使用 TypedSQL,您可以

  1. 使用熟悉的語法編寫複雜的 SQL 查詢
  2. 受益於完整的 IDE 支援和 SQL 的語法突顯
  3. 將您的 SQL 查詢作為完全類型化的函式匯入到您的 TypeScript 程式碼中
  4. 在 Prisma 類型系統的安全性下,維持原始 SQL 的靈活性

TypedSQL 特別適用於

  • 難以使用 Prisma 查詢 API 表達的複雜報表查詢
  • 需要微調 SQL 的效能關鍵操作
  • 利用 Prisma API 中尚未支援的資料庫特定功能

透過使用 TypedSQL,您可以編寫高效、類型安全的資料庫查詢,而不會犧牲原始 SQL 的強大功能和靈活性。此功能可讓您將自訂 SQL 查詢無縫整合到您的 Prisma 驅動應用程式中,確保類型安全並提高開發人員生產力。

有關如何開始使用 TypedSQL 的詳細指南,包括設定說明和使用範例,請參閱我們的 TypedSQL 文件

原始查詢

在 5.19.0 版本之前,Prisma Client 僅支援非類型安全的原始 SQL 查詢,並且需要手動將查詢結果對應到所需的類型。

雖然不如 TypedSQL 那麼符合人體工學,但這些查詢仍然受到支援,並且在 TypedSQL 查詢不可能時(無論是因為 TypedSQL 中尚不支援的功能,還是因為查詢是動態產生的)非常有用。

關聯式資料庫中原始 SQL 查詢的替代方法

Prisma ORM 支援四種在關聯式資料庫中執行原始 SQL 查詢的方法

這些命令與使用 TypedSQL 類似,但它們不是類型安全的,並且是以字串形式寫在您的程式碼中,而不是在專用的 .sql 檔案中。

文件資料庫中原始查詢的替代方法

對於 MongoDB,Prisma ORM 支援三種執行原始查詢的方法

當您需要使用 MongoDB 特定功能或最佳化時,這些方法可讓您執行原始 MongoDB 命令和查詢,從而提供靈活性。

$runCommandRaw 用於執行資料庫命令,<model>.findRaw 用於尋找符合篩選條件的文件,而 <model>.aggregateRaw 用於彙總操作。所有三種方法均從 Prisma 3.9.0 及更高版本開始提供。

與關聯式資料庫中的原始查詢類似,這些方法不是類型安全的,並且需要手動處理查詢結果。