如何在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
相关产品推荐
相关产品推荐

