You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prisma ORM中使用多个数据库 能否生成多个schema.prisma

Prisma多数据源配置及多schema文件实现方案

是否支持多个schema.prisma文件

Prisma原生支持为不同数据库连接创建独立的schema文件,你可以按照业务域、数据库类型等维度拆分schema,比如prisma/user.prisma对应用户库、prisma/order.prisma对应订单库,完全符合你的使用需求。

多数据源完整配置步骤

  • 第一步:创建多个独立的prisma schema文件,每个文件单独配置datasource块和generator块,注意不同schema的generator输出路径必须不同,避免生成的Client代码互相覆盖,示例如下:
// prisma/user.prisma(对应PostgreSQL用户库)
datasource user_db {
  provider = "postgresql"
  url      = env("DATABASE_URL_USER")
}

generator client {
  provider = "prisma-client-js"
  output   = "../generated/user-client"
}

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}
// prisma/order.prisma(对应MySQL订单库)
datasource order_db {
  provider = "mysql"
  url      = env("DATABASE_URL_ORDER")
}

generator client {
  provider = "prisma-client-js"
  output   = "../generated/order-client"
}

model Order {
  id      Int     @id @default(autoincrement())
  userId  Int
  amount  Float
  status  String
}
  • 第二步:在项目环境变量文件(比如.env)中添加多个数据库连接地址
DATABASE_URL_USER="postgresql://账号:密码@localhost:5432/user_db"
DATABASE_URL_ORDER="mysql://账号:密码@localhost:3306/order_db"
  • 第三步:分别为每个schema生成独立的Prisma Client,执行命令时指定对应schema路径即可
# 生成用户库Client
npx prisma generate --schema prisma/user.prisma
# 生成订单库Client
npx prisma generate --schema prisma/order.prisma

# 数据库迁移同理,指定schema路径即可
npx prisma migrate dev --schema prisma/user.prisma --name init_user_table
npx prisma migrate dev --schema prisma/order.prisma --name init_order_table
  • 第四步:项目代码中引入不同Client进行跨库操作,示例如下:
import { PrismaClient as UserPrismaClient } from './prisma/generated/user-client'
import { PrismaClient as OrderPrismaClient } from './prisma/generated/order-client'

// 初始化两个库的连接实例
const userDb = new UserPrismaClient()
const orderDb = new OrderPrismaClient()

// 业务调用示例
const allUsers = await userDb.user.findMany()
const userOrders = await orderDb.order.findMany({
  where: { userId: 1 }
})

注意事项

  • 不同数据源的schema之间无法直接做跨库模型关联,比如你不能在User模型中用@relation直接关联Order模型,跨库关联查询需要在业务层自行做数据聚合。
  • 每次修改任意schema文件后,都需要单独执行对应schema的generate命令更新Client代码。
  • 如果你用的是Prisma 4.10及以上版本的prismaSchemaFolder预览特性,该特性仅支持同一数据源的多文件拆分,多数据源场景还是需要用上述独立schema+独立输出路径的方案。

内容的提问来源于stack exchange,提问作者Rakesh Kumar Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:21:01