如何在运行时更改 PrismaClient 数据库连接?

A_L*_*A_L 9 javascript prisma

我有 .env 文件,例如

DATABASE_URL="sqlserver://srv:50119;initial catalog=mydb;user=aaa;password=bbb;"
Run Code Online (Sandbox Code Playgroud)

然后 schema.prisma 像

datasource db {
  provider = "sqlserver"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
  previewFeatures = ["microsoftSqlServer"]
}
Run Code Online (Sandbox Code Playgroud)

我使用以下方式生成客户端:

npx prisma generate
Run Code Online (Sandbox Code Playgroud)

然后 Prisma 在我的 Express 应用程序中使用以下方法工作得很好:

const prisma = new PrismaClient();
Run Code Online (Sandbox Code Playgroud)

假设我想为用户使用不同的数据库进行多租户,我该如何实现这一点?理想情况下,我想在运行时切换数据库连接,但似乎 DATABASE_URL 仅在 prisma 生成期间读取,而不是在运行时读取,因此生成的客户端最终会得到硬编码的数据库 url。

Rya*_*yan 7

您可以使用datasource 属性创建新PrismaClient实例并传递动态 URL。

数据源

以编程方式覆盖 schema.prisma 文件中数据源块的属性 - 例如,作为集成测试的一部分。另请参阅:数据源