数据库配置指南(Prisma Database Setup)
概述
本指南提供 Prisma ORM 与各类数据库提供者的完整配置方法,涵盖 PostgreSQL、MySQL、SQLite、SQL Server、CockroachDB 和 Prisma Postgres。适用于项目初始化、数据库切换、连接配置和故障排查。
适用场景
- 初始化新的 Prisma 项目
- 切换数据库提供者
- 配置连接字符串和环境变量
- 排查数据库连接问题
- 配置数据库特定功能
- 生成和实例化 Prisma Client
系统要求(Prisma ORM 7)
- Node.js 20.19.0+
- TypeScript 5.4.0+
支持的数据库
| 数据库 | 提供者字符串 | 说明 |
|---|---|---|
| PostgreSQL | postgresql |
默认选项,完整功能支持 |
| MySQL | mysql |
广泛支持,部分 JSON 差异 |
| SQLite | sqlite |
本地文件数据库,不支持枚举(Enum)和标量列表(Scalar List) |
| MongoDB | mongodb |
v7 不支持(请使用 v6) |
| SQL Server | sqlserver |
微软生态系统 |
| CockroachDB | cockroachdb |
分布式 SQL,兼容 Postgres |
| Prisma Postgres | postgresql |
托管的 Serverless 数据库 |
配置文件
Prisma v7 使用两个主要配置文件:
prisma/schema.prisma:定义datasource块prisma.config.ts:配置连接 URL(替代 Schema 中的环境变量加载)
驱动适配器(Driver Adapters)— Prisma ORM 7
Prisma ORM 7 默认使用查询编译器(Query Compiler),必须使用驱动适配器。根据数据库选择对应的适配器和驱动,并将适配器传递给 PrismaClient。
| 数据库 | 适配器 | JS 驱动 |
|---|---|---|
| PostgreSQL | @prisma/adapter-pg |
pg |
| CockroachDB | @prisma/adapter-pg |
pg |
| Prisma Postgres | @prisma/adapter-ppg |
@prisma/ppg |
| MySQL / MariaDB | @prisma/adapter-mariadb |
mariadb |
| SQLite | @prisma/adapter-better-sqlite3 |
better-sqlite3 |
| SQLite (Turso/LibSQL) | @prisma/adapter-libsql |
@libsql/client |
| SQL Server | @prisma/adapter-mssql |
node-mssql |
Prisma Client 配置(必需)
1. 安装 Prisma CLI 和 Prisma Client
npm install prisma --save-dev
npm install @prisma/client
2. 添加生成器块(v7 中 output 为必需)
generator client {
provider = "prisma-client"
output = "../generated"
}
3. 生成 Prisma Client
npx prisma generate
4. 使用数据库特定的驱动适配器实例化 Client
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
5. 每次 Schema 变更后重新运行 prisma generate
各数据库快速配置
PostgreSQL
Schema 配置:
datasource db {
provider = "postgresql"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:
import 'dotenv/config'
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
连接字符串格式:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA
MySQL
Schema 配置:
datasource db {
provider = "mysql"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:
import { PrismaClient } from '../generated/client'
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
const adapter = new PrismaMariaDb({
host: 'localhost',
port: 3306,
connectionLimit: 5,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
})
const prisma = new PrismaClient({ adapter })
连接字符串格式:
mysql://USER:PASSWORD@HOST:PORT/DATABASE
SQLite
Schema 配置:
datasource db {
provider = "sqlite"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:
import { PrismaClient } from '../generated/client'
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3'
const adapter = new PrismaBetterSqlite3({
url: process.env.DATABASE_URL || 'file:./dev.db'
})
const prisma = new PrismaClient({ adapter })
连接字符串格式:
file:./dev.db
SQL Server
Schema 配置:
datasource db {
provider = "sqlserver"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:
import { PrismaClient } from '../generated/client'
import { PrismaMssql } from '@prisma/adapter-mssql'
const adapter = new PrismaMssql({
server: 'localhost',
port: 1433,
database: 'mydb',
user: process.env.SQLSERVER_USER,
password: process.env.SQLSERVER_PASSWORD,
options: {
encrypt: true,
trustServerCertificate: true,
},
})
const prisma = new PrismaClient({ adapter })
CockroachDB
Schema 配置:
datasource db {
provider = "cockroachdb"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:(与 PostgreSQL 相同,使用 @prisma/adapter-pg)
import { PrismaClient } from '../generated/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
Prisma Postgres(托管云数据库)
Schema 配置:
datasource db {
provider = "postgresql"
}
generator client {
provider = "prisma-client"
output = "../generated"
}
客户端实例化:
import { PrismaClient } from '../generated/client'
import { PrismaPostgresAdapter } from '@prisma/adapter-ppg'
const prisma = new PrismaClient({
adapter: new PrismaPostgresAdapter({
connectionString: process.env.PRISMA_DIRECT_TCP_URL,
}),
})
MongoDB(仅 Prisma v6)
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
注意:MongoDB 在 Prisma v7 中不受支持,请继续使用 v6。
prisma.config.ts 配置
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
directUrl: env('DIRECT_URL'), // 可选:直连 URL
shadowDatabaseUrl: env('SHADOW_DATABASE_URL'), // 可选:影子数据库
},
})
Bun 运行时
如果使用 Bun,运行 Prisma CLI 命令时添加 bunx --bun,确保使用 Bun 运行时而非回退到 Node.js:
bunx --bun prisma init
bunx --bun prisma generate
bunx --bun prisma migrate dev
附录:适配器安装速查
# PostgreSQL
npm install @prisma/adapter-pg
# MySQL / MariaDB
npm install @prisma/adapter-mariadb mariadb
# SQLite
npm install @prisma/adapter-better-sqlite3
# Prisma Postgres
npm install @prisma/adapter-ppg @prisma/ppg
# SQL Server
npm install @prisma/adapter-mssql mssql
# Neon(Serverless PostgreSQL)
npm install @prisma/adapter-neon
# Turso/LibSQL
npm install @prisma/adapter-libsql @libsql/client