数据库配置指南(Prisma Database Setup)

Verified 入门 Starter 参考型 Reference ⚡ Claude Code 专属 ⚡ Claude Code Optimized
7 min read · 361 lines

Prisma 官方数据库配置:6 大数据库 + v7 Driver Adapter 必须配置

数据库配置指南(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 使用两个主要配置文件:

  1. prisma/schema.prisma:定义 datasource
  2. 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

相关技能 Related Skills