跳至主要内容

数据库驱动程序

默认内置驱动程序

Prisma Client 的组件之一是 查询引擎。查询引擎负责将 Prisma Client 查询转换为 SQL 语句。它通过内置驱动程序(无需额外设置)使用 TCP 连接到您的数据库。

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

驱动程序适配器

Prisma Client 可以使用 **驱动程序适配器** 连接到您的数据库并使用 JavaScript 数据库驱动程序运行查询。适配器充当 Prisma Client 和 JavaScript 数据库驱动程序之间的转换器

Prisma Client 将使用查询引擎将 Prisma Client 查询转换为 SQL,并通过 JavaScript 数据库驱动程序运行生成的 SQL 查询。

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

驱动程序适配器有两种不同的类型

注意:驱动程序适配器支持使用 Prisma ORM 的应用程序的 边缘部署

数据库驱动程序适配器

您可以使用 Prisma Client 中基于 Node.js 的驱动程序通过数据库驱动程序适配器连接到您的数据库。Prisma 维护以下数据库驱动程序适配器

无服务器驱动程序适配器

数据库提供商(例如 Neon 和 PlanetScale)允许您使用除 TCP 之外的其他协议(例如 HTTP 和 WebSockets)连接到您的数据库。这些数据库驱动程序针对在无服务器和边缘环境中连接到您的数据库进行了优化。

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 的完整示例。