メインコンテンツにスキップ

独自の SQL を記述する

Prisma Client API は、すべてのデータベースクエリを直感的で型安全かつ便利にすることを目指していますが、生の SQL が最適なツールとなる状況が存在する可能性があります。

これは、特定のクエリのパフォーマンスを最適化する必要がある場合や、データ要件が Prisma Client のクエリ API では完全に表現できない場合など、さまざまな理由で発生する可能性があります。

ほとんどの場合、TypedSQL を使用すると、Prisma Client の優れたユーザーエクスペリエンスの恩恵を受けながら、SQL でクエリを表現できます。ただし、TypedSQL は静的に型付けされているため、動的に生成された WHERE 句など、特定のシナリオを処理できない場合があります。このような場合は、$queryRaw または $executeRaw、またはそれらの安全でない代替手段を使用する必要があります。

Prisma Client と TypedSQL で型安全なクエリを記述する

情報

TypedSQL は Prisma ORM 5.19.0 以降で利用可能です。以前のバージョンでの生のデータベースアクセスについては、生のクエリに関するドキュメントを参照してください。

TypedSQL とは?

TypedSQL は Prisma ORM の新機能であり、Prisma Client の優れた開発者エクスペリエンスを享受しながら、クエリを .sql ファイルに記述できます。使い慣れたコードを記述し、完全な型付きの入力と出力の恩恵を受けることができます。

TypedSQL を使用すると、次のことが可能になります。

  1. 使い慣れた構文を使用して複雑な SQL クエリを記述する
  2. SQL の完全な IDE サポートと構文ハイライトの恩恵を受ける
  3. SQL クエリを完全に型付けされた関数として TypeScript コードにインポートする
  4. Prisma の型システムの安全性と生の SQL の柔軟性を維持する

TypedSQL は特に以下に役立ちます。

  • Prisma のクエリ API を使用して表現するのが難しい複雑なレポートクエリ
  • 微調整された SQL を必要とするパフォーマンスが重要な操作
  • Prisma の API でまだサポートされていないデータベース固有の機能の活用

TypedSQL を使用することで、生の SQL のパワーと柔軟性を犠牲にすることなく、効率的で型安全なデータベースクエリを記述できます。この機能により、カスタム SQL クエリを Prisma を利用したアプリケーションにシームレスに統合し、型安全性を確保し、開発者の生産性を向上させることができます。

セットアップ手順や使用例など、TypedSQL の始め方に関する詳細なガイドについては、TypedSQL のドキュメントを参照してください。

Raw queries(生クエリ)

バージョン 5.19.0 より前では、Prisma Client は型安全ではなく、クエリ結果を目的の型に手動でマッピングする必要がある生の SQL クエリのみをサポートしていました。

TypedSQL ほど人間工学的ではありませんが、これらのクエリは依然としてサポートされており、TypedSQL クエリがまだサポートされていない機能が原因で不可能な場合や、クエリが動的に生成される場合に役立ちます。

リレーショナルデータベースにおける生の SQL クエリの代替アプローチ

Prisma ORM は、リレーショナルデータベースで生の SQL クエリを実行するための 4 つの方法をサポートしています。

これらのコマンドは TypedSQL の使用に似ていますが、型安全ではなく、専用の .sql ファイルではなく、コード内で文字列として記述されます。

ドキュメントデータベースにおける生クエリの代替アプローチ

MongoDB の場合、Prisma ORM は生クエリを実行するための 3 つの方法をサポートしています。

これらのメソッドを使用すると、生の MongoDB コマンドとクエリを実行でき、MongoDB 固有の機能や最適化を使用する必要がある場合に柔軟性を提供します。

$runCommandRaw はデータベースコマンドの実行に使用され、<model>.findRaw はフィルターに一致するドキュメントの検索に使用され、<model>.aggregateRaw は集計操作に使用されます。3 つのメソッドはすべて Prisma バージョン 3.9.0 以降で使用できます。

リレーショナルデータベースの生クエリと同様に、これらのメソッドは型安全ではなく、クエリ結果の手動処理が必要です。