跳至主要内容

数据库驱动程序

默认内置驱动程序

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

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

驱动程序适配器

Prisma 客户端可以使用驱动程序适配器通过 JavaScript 数据库驱动程序连接并对您的数据库运行查询。适配器充当 Prisma 客户端和 JavaScript 数据库驱动程序之间的翻译器

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

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

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

注意:驱动程序适配器使使用 Prisma ORM 的应用程序能够进行 边缘部署

数据库驱动程序适配器

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

无服务器驱动程序适配器

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

Prisma ORM 维护以下无服务器驱动程序适配器

社区维护的数据库驱动程序适配器

您也可以为正在使用的数据库构建自己的驱动程序适配器。以下列出了社区维护的驱动程序适配器

如何使用驱动程序适配器

要使用此功能

  1. driverAdapters 预览功能添加到架构中的 previewFeatures

    generator client {
    provider = "prisma-client-js"
    previewFeatures = ["driverAdapters"]
    }
  2. 生成 Prisma 客户端

    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 客户端的自定义输出路径 时,您不能使用相对路径引用 Prisma 客户端。

假设您在 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 的完整示例,请参阅 此示例项目