简介与命令指南
一、简介
Prisma 是一款现代数据库工具包,可用于查询、迁移和建模数据库,简化与数据库的交互(https://prisma.io)。
二、安装与使用
通过以下命令安装 Prisma:
npm install prisma --save-dev
三、命令列表
以下是 Prisma v6.6.0提供的常用命令:
常用前缀为npx prisma
命令 | 说明 |
---|---|
init | 为您的应用设置 Prisma |
generate | 生成工件(例如 Prisma Client) |
db | 管理数据库架构和生命周期 |
migrate | 迁移数据库 |
studio | 使用 Prisma Studio 浏览数据 |
validate | 验证 Prisma 架构 |
format | 格式化 Prisma 架构 |
version | 显示 Prisma 版本信息 |
debug | 显示 Prisma 调试信息 |
mcp | 启动 MCP 服务器,用于 AI 开发工具 |
四、功能增强(限量免费试用)
通过 Prisma Accelerate 优化性能,利用连接池和缓存提高效率;通过 Prisma Pulse 捕获数据库的实时事件。更多详情请访问:Prisma Data Platform。
五、示例命令
- 初始化新的 Prisma 项目:
$ prisma init
- 生成工件(例如 Prisma Client):
$ prisma generate
- 浏览数据:
$ prisma studio
- 从 Prisma 架构创建迁移并应用到数据库,生成工件(例如 Prisma Client):
$ prisma migrate dev
- 从现有数据库提取架构,更新 Prisma 架构:
$ prisma db pull
- 将 Prisma 架构状态推送到数据库:
$ prisma db push
- 验证 Prisma 架构:
$ prisma validate
- 格式化 Prisma 架构:
$ prisma format
- 显示 Prisma 版本信息:
$ prisma version
- 显示 Prisma 调试信息:
$ prisma debug
Prisma Client
https://prisma.org.cn/docs/orm/prisma-client
要开始使用 Prisma Client
,首先安装 @prisma/client
包
npm install @prisma/client
然后,运行 prisma generate
,它会读取你的 Prisma schema 并生成 Prisma Client。(现在需要配置generate输出目录了而不是默认的node_modules下了)
npx prisma generate
每当你更新你的 Prisma schema 时,你都必须使用 prisma migrate dev 或 prisma db push 来更新你的数据库 schema。这将使你的数据库 schema 与你的 Prisma schema 保持同步。这些命令还将在后台运行 prisma generate 以重新生成你的 Prisma Client。
Prisma Migrate
https://prisma.org.cn/docs/orm/prisma-migrate/understanding-prisma-migrate
Prisma Migrate 是一个数据库迁移工具,它支持模型/实体优先迁移模式,用于管理本地环境和生产环境中的数据库 schema。
数据库迁移的概念
数据库迁移是一组受控的更改,用于修改和演变你的数据库 schema 的结构。迁移帮助你将数据库 schema 从一种状态过渡到另一种状态。例如,在迁移中,你可以创建或删除表和列,拆分表中的字段,或向数据库添加类型和约束。
迁移提供状态管理,这可以帮助你跟踪数据库的状态。
主要的 schema 迁移模式有两种:
模型/实体优先迁移
: 使用这种模式,你用代码定义数据库 schema 的结构,然后使用迁移工具生成 SQL,例如,用于同步你的应用程序和数据库 schema。数据库优先迁移
: 使用这种模式,你定义你的数据库结构,并使用 SQL 将其应用于你的数据库。然后你内省数据库以生成描述你的数据库结构的代码,从而同步你的应用程序和数据库 schema。
使用
在你的项目中使用 Prisma Migrate 时,工作流程将是迭代的
- 本地开发环境(功能分支)
示例
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... you will write your Prisma Client queries here
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})