跳到主要内容

数据库驱动

默认内置驱动

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

注意

v6.7.0 起,Prisma ORM 引入了 queryCompiler 预览特性。

启用后,您的 Prisma Client 将在生成时不包含基于 Rust 的查询引擎二进制文件:

generator client {
provider = "prisma-client-js"
previewFeatures = ["queryCompiler", "driverAdapters"]
}

请注意,queryCompiler 需要同时启用 驱动适配器 预览特性。

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. 更新您的 schema 中的 previewFeatures 块,以包含 driverAdapters 预览特性

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

    npx prisma generate
  3. 请参阅以下页面,了解如何将特定驱动适配器与特定数据库提供商配合使用

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

v6.6.0 中新的驱动适配器 API

v6.6.0 中,我们引入了一个简化的版本,用于在使用驱动适配器时实例化 Prisma Client。您现在无需创建驱动程序/客户端实例来传递给驱动适配器,而是可以直接创建驱动适配器(并根据需要将驱动程序选项传递给它)。

以下是使用 @prisma/adapter-libsql 适配器的示例

6.6.0 之前

早期版本的 Prisma ORM 要求您首先实例化驱动程序本身,然后使用该实例创建 Prisma 驱动适配器。以下是使用 LibSQL 的 @libsql/client 驱动程序的示例

import { createClient } from '@libsql/client'
import { PrismaLibSQL } from '@prisma/adapter-libsql'
import { PrismaClient } from '@prisma/client'

// Old way of using driver adapters (before 6.6.0)
const driver = createClient({
url: env.LIBSQL_DATABASE_URL,
authToken: env.LIBSQL_DATABASE_TOKEN,
})
const adapter = new PrismaLibSQL(driver)

const prisma = new PrismaClient({ adapter })

6.6.0 及更高版本

自 6.6.0 版本发布以来,您可以直接使用您首选的 JS 原生驱动程序的选项来实例化驱动适配器。

import { PrismaLibSQL } from '@prisma/adapter-libsql'
import { PrismaClient } from '../prisma/prisma-client'

const adapter = new PrismaLibSQL({
url: env.LIBSQL_DATABASE_URL,
authToken: env.LIBSQL_DATABASE_TOKEN,
})

const prisma = new PrismaClient({ adapter })

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

使用 Prisma ORM 的内置驱动时,连接字符串是从 Prisma schema 中 datasource 块的 url 字段读取的。

另一方面,当使用驱动适配器时,连接字符串需要在驱动适配器初次设置时在您的应用程序代码中提供。以下是 pg 驱动和 @prisma/adapter-pg 适配器的实现方式

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

const adapter = new PrismaPg({ connectionString: env.DATABASE_URL })
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,
},
},
// ...
})
© . All rights reserved.