跳到主要内容

数据库驱动

默认内置驱动

Prisma Client 的组件之一是 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,并通过 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. 更新您 schema 中的 previewFeatures 块,以包含 driverAdapters 预览功能

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

    npx prisma generate
  3. 请参阅以下页面,以了解有关如何将特定驱动适配器与特定数据库提供商一起使用的更多信息

关于使用驱动适配器的注意事项

驱动适配器不从 Prisma schema 读取连接字符串

当使用 Prisma ORM 的内置驱动程序时,连接字符串从您的 Prisma schema 中 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 schema 中 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 的完整示例。