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

データベースドライバ

デフォルトの組み込みドライバ

Prisma Clientのコンポーネントの1つは、Query Engineです。Query Engineは、Prisma ClientクエリをSQLステートメントに変換する役割を担っています。追加のセットアップを必要としない組み込みドライバを使用して、TCP経由でデータベースに接続します。

Query flow from the user application to the database with Prisma Client

ドライバアダプター

Prisma Clientは、ドライバアダプターを使用してJavaScriptデータベースドライバを使用してデータベースに接続し、クエリを実行できます。アダプターは、Prisma ClientとJavaScriptデータベースドライバ間の翻訳者として機能します。

Prisma ClientはQuery Engineを使用して、Prisma ClientクエリをSQLに変換し、生成されたSQLクエリをJavaScriptデータベースドライバ経由で実行します。

Query flow from the user application to the database using Prisma Client and driver adapters

ドライバアダプターには2つの異なるタイプがあります

:ドライバアダプターは、Prisma ORMを使用するアプリケーションのエッジデプロイメントを可能にします。

データベースドライバアダプター

データベースドライバアダプターを使用して、Prisma ClientからNode.jsベースのドライバを使用してデータベースに接続できます。Prismaは、次のデータベースドライバアダプターをメンテナンスしています

サーバーレスドライバアダプター

NeonやPlanetScaleなどのデータベースプロバイダーでは、HTTPやWebSocketsなどのTCP以外のプロトコルを使用してデータベースに接続できます。これらのデータベースドライバは、サーバーレスおよびエッジ環境でデータベースに接続するために最適化されています。

Prisma ORMは、次のサーバーレスドライバアダプターをメンテナンスしています

コミュニティ管理のデータベースドライバアダプター

使用しているデータベース用の独自のドライバアダプターを構築することもできます。以下は、コミュニティ管理のドライバアダプターのリストです

ドライバアダプターの使用方法

この機能を使用するには

  1. スキーマのpreviewFeaturesブロックを更新して、driverAdaptersプレビュー機能を含めます

    generator client {
    provider = "prisma-client-js"
    previewFeatures = ["driverAdapters"]
    }
  2. Prisma Clientを生成

    npx prisma generate
  3. 特定のデータベースプロバイダーで特定のドライバアダプターを使用する方法の詳細については、次のページを参照してください

ドライバアダプターの使用に関する注意

ドライバアダプターはPrismaスキーマから接続文字列を読み取りません

Prisma ORMの組み込みドライバを使用する場合、接続文字列はPrismaスキーマのdatasourceブロックのurlフィールドから読み取られます。

一方、ドライバアダプターを使用する場合、接続文字列は、ドライバアダプターが最初にセットアップされたときにアプリケーションコードで提供する必要があります。以下は、pgドライバと@prisma/adapter-pgアダプターでこれを行う方法です

import { PrismaClient } from '@prisma/client'
import { PrismaPg } from '@prisma/adapter-pg'
import { Pool } from 'pg'

const pool = new Pool({ connectionString: env.DATABASE_URL })
const adapter = new PrismaPg(pool)
const prisma = new PrismaClient({ adapter })

具体的なセットアップ手順については、使用しているドライバアダプターのドキュメントを参照してください。

ドライバアダプターとカスタム出力パス

Prisma 5.9.0以降、ドライバアダプタープレビュー機能をPrisma Clientのカスタム出力パスとともに使用する場合、相対パスを使用してPrisma Clientを参照することはできません。

Prismaスキーマでoutput../src/generated/clientに設定されていると仮定しましょう

generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}

すべきでないことは、そのパスを相対的に参照することです

// what not to do!
import { PrismaClient } from './src/generated/client'

const client = new PrismaClient()

代わりに、リンクされた依存関係を使用する必要があります。

npm add db@./src/generated/client

これで、生成されたクライアントをdbを使用して参照できるようになります!

import { PrismaClient } from 'db'

const client = new PrismaClient()

ドライバアダプターと特定のフレームワーク

Nuxt

Nuxtでドライバアダプターをエッジ関数環境にデプロイすることは、すぐに使用できるわけではありませんが、nitro.experimental.wasm構成オプションを追加すると修正されます

export default defineNuxtConfig({
// ...
nitro: {
// ...
experimental: {
wasm: true,
},
},
// ...
})

このサンプルプロジェクトを参照してください。これは、Cloudflare Pagesにデプロイできる完全な例です。