将 Prisma ORM 添加到现有 SQLite 项目
SQLite 是一个轻量级、基于文件的数据库,非常适合开发、原型设计和小型应用程序。它无需设置,并将数据存储在本地文件中。在本指南中,您将学习如何将 Prisma ORM 添加到现有 TypeScript 项目中,将其连接到 SQLite,内省现有数据库模式,并开始使用类型安全的 Prisma Client 进行查询。
先决条件
您需要
- 您的机器上安装了 Node.js v20.19+、v22.12+ 或 v24.0+
- JavaScript 或 TypeScript 基础知识
1. 设置 Prisma ORM
导航到您现有的项目目录并安装所需的依赖项
npm install prisma @types/node @types/better-sqlite3 --save-dev
npm install @prisma/client @prisma/adapter-better-sqlite3 dotenv
每个包的作用如下
prisma- 用于运行prisma init、prisma db pull和prisma generate等命令的 Prisma CLI@prisma/client- 用于查询数据库的 Prisma Client 库@prisma/adapter-better-sqlite3- 连接 Prisma Client 到数据库的 SQLite 驱动适配器@types/better-sqlite3- better-sqlite3 的 TypeScript 类型定义dotenv- 从您的.env文件加载环境变量
2. 初始化 Prisma ORM
使用以下命令创建 Prisma Schema 文件来设置您的 Prisma ORM 项目
npx prisma init --datasource-provider sqlite --output ../generated/prisma
此命令执行以下操作
- 创建一个
prisma/目录,其中包含一个schema.prisma文件,其中包含您的数据库连接配置 - 在根目录中创建一个
.env文件用于环境变量 - 创建一个
prisma.config.ts文件用于 Prisma 配置
生成的 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'),
},
})
生成的 schema 使用带有自定义输出路径的 ESM 优先的 prisma-client 生成器
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
datasource db {
provider = "sqlite"
}
应创建包含以下值的 .env 文件
DATABASE_URL="file:./dev.db"
3. 连接您的数据库
更新 .env 文件以指向您现有的 SQLite 数据库文件
DATABASE_URL="file:./path/to/your/database.db"
4. 内省您的数据库
运行以下命令以内省您现有的数据库
npx prisma db pull
此命令读取 DATABASE_URL 环境变量,连接到您的数据库,并内省数据库模式。然后,它将数据库模式从 SQL 转换为您的 Prisma 模式中的数据模型。

内省后,您的 Prisma 模式将包含代表您现有数据库表的模型。
5. 基线化您的数据库
要将 Prisma Migrate 与现有数据库一起使用,您需要基线化您的数据库。
首先,创建一个 migrations 目录
mkdir -p prisma/migrations/0_init
接下来,使用 prisma migrate diff 生成迁移文件
npx prisma migrate diff --from-empty --to-schema prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql
检查生成的迁移文件,确保它与您的数据库模式匹配。
然后,将迁移标记为已应用
npx prisma migrate resolve --applied 0_init
您现在拥有当前数据库模式的基线。
6. 生成 Prisma ORM 类型
根据您内省的模式生成 Prisma Client
npx prisma generate
这会在 generated/prisma 目录中创建一个根据您的数据库模式量身定制的类型安全的 Prisma Client。
7. 实例化 Prisma Client
创建一个实用文件来实例化 Prisma Client。您需要将 Prisma ORM 驱动程序适配器的实例传递给 PrismaClient 构造函数
import "dotenv/config";
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
import { PrismaClient } from "../generated/prisma/client";
const connectionString = `${process.env.DATABASE_URL}`;
const adapter = new PrismaBetterSqlite3({ url: connectionString });
const prisma = new PrismaClient({ adapter });
export { prisma };
Bun 不支持 better-sqlite3 依赖的本机 SQLite 驱动程序(请参阅 node:sqlite 参考)。当目标是 Bun 时,请改用 @prisma/adapter-libsql 适配器。
import 'dotenv/config';
import { PrismaLibSql } from '@prisma/adapter-libsql';
import { PrismaClient } from '../generated/prisma/client';
const adapter = new PrismaLibSql({
url: process.env.DATABASE_URL ?? '',
});
const prisma = new PrismaClient({ adapter });
export { prisma };
8. 查询您的数据库
现在您可以使用 Prisma Client 查询您的数据库。创建一个 script.ts 文件
import { prisma } from './lib/prisma'
async function main() {
// Example: Fetch all records from a table
// Replace 'user' with your actual model name
const allUsers = await prisma.user.findMany()
console.log('All users:', JSON.stringify(allUsers, null, 2))
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
运行脚本
npx tsx script.ts
9. 演进您的模式
要更改您的数据库模式
9.1. 更新您的 Prisma 模式文件
更新您的 Prisma 模式文件以反映您想要对数据库模式进行的更改。例如,添加一个新模型
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
authorId Int
author User @relation(fields: [authorId], references: [id])
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
9.2. 创建并应用迁移:
npx prisma migrate dev --name your_migration_name
此命令将
- 创建一个新的 SQL 迁移文件
- 将迁移应用到您的数据库
- 重新生成 Prisma Client
10. 使用 Prisma Studio 探索您的数据
Prisma Studio 是一个用于数据库的可视化编辑器。使用以下命令启动它
npx prisma studio --config ./prisma.config.ts
这会打开一个 Web 界面,您可以在其中查看和编辑数据。
Prisma Studio 目前支持 PostgreSQL、MySQL 和 SQLite。有关更多详细信息,请参阅Prisma Studio 支持的数据库。
- 目前,SQLite 的数据库 URL 中的文件路径必须包含
file:协议 - Node.js 22.5+:可直接使用内置的
node:sqlite模块- 可能需要
NODE_OPTIONS=--experimental-sqlite环境变量
- 可能需要
- Node.js 20:需要安装
better-sqlite3作为依赖项- 如果使用 pnpm 10+ 和
pnpx,您将需要--allow-build=better-sqlite3标志
- 如果使用 pnpm 10+ 和
- Deno >= 2.2:通过 内置 SQLite 模块 支持
- Bun:Prisma Studio 对 SQLite 的支持即将推出,目前尚未可用
npx 和 better-sqlite3如果您的运行时中没有 node:sqlite 可用,或者不想将 better-sqlite3 作为硬依赖项安装(它会增加约 10MB),您可以使用 npx 临时安装所需的包
npx -p better-sqlite3 -p prisma prisma studio --url file:./path/to/your/database.db
此命令
- 临时安装
better-sqlite3,而无需将其添加到您的项目依赖项中 - 使用指定的 SQLite 数据库文件运行 Prisma Studio
- 避免了项目中
better-sqlite3的 10MB 开销
后续步骤
您已成功设置 Prisma ORM。接下来您可以探索
- 了解有关 Prisma Client 的更多信息:探索 Prisma Client API 以进行高级查询、筛选和关系操作
- 数据库迁移:了解 Prisma Migrate 以演进您的数据库模式
- 性能优化:发现查询优化技术
- 构建完整的应用程序:查看我们的框架指南,将 Prisma ORM 与 Next.js、Express 等集成
- 加入社区:在 Discord 上与其他开发者联系