数据库驱动程序
默认内置驱动程序
Prisma 客户端的组件之一是 查询引擎。查询引擎负责将 Prisma 客户端查询转换为 SQL 语句。它通过内置驱动程序(不需要额外设置)使用 TCP 连接到您的数据库。
驱动程序适配器
Prisma 客户端可以使用驱动程序适配器通过 JavaScript 数据库驱动程序连接并对您的数据库运行查询。适配器充当 Prisma 客户端和 JavaScript 数据库驱动程序之间的翻译器。
Prisma 客户端将使用查询引擎将 Prisma 客户端查询转换为 SQL,并通过 JavaScript 数据库驱动程序运行生成的 SQL 查询。
驱动程序适配器有两种不同的类型
注意:驱动程序适配器使使用 Prisma ORM 的应用程序能够进行 边缘部署。
数据库驱动程序适配器
您可以使用 Prisma 客户端中的基于 Node.js 的驱动程序通过数据库驱动程序适配器连接到您的数据库。Prisma 维护以下数据库驱动程序适配器
无服务器驱动程序适配器
数据库提供商(例如 Neon 和 PlanetScale)允许您使用除 TCP 之外的其他协议(例如 HTTP 和 WebSockets)连接到您的数据库。这些数据库驱动程序针对在无服务器和边缘环境中连接到您的数据库进行了优化。
Prisma ORM 维护以下无服务器驱动程序适配器
- Neon(以及 Vercel Postgres)
- PlanetScale
- Cloudflare D1
社区维护的数据库驱动程序适配器
您也可以为正在使用的数据库构建自己的驱动程序适配器。以下列出了社区维护的驱动程序适配器
如何使用驱动程序适配器
要使用此功能
-
将
driverAdapters
预览功能添加到架构中的previewFeatures
块generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
} -
生成 Prisma 客户端
npx prisma generate
-
请参考以下页面,详细了解如何将特定驱动程序适配器与特定数据库提供商一起使用
关于使用驱动程序适配器的注意事项
驱动程序适配器不从 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
- pnpm
- yarn
npm add db@./src/generated/client
pnpm add db@link:./src/generated/client
yarn add db@link:./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 的完整示例,请参阅 此示例项目。