prisma
Prisma 是一个现代化的 ORM(对象关系映射)工具,专为 Node.js 和 TypeScript 设计,提供简洁、高效的数据库交互方式。它旨在简化数据库访问、提高开发效率,并增强代码的类型安全性。Prisma 支持多种数据库系统,包括 MySQL、PostgreSQL、SQLite、SQL Server 等。
Prisma 的主要组件
- Prisma Client:是自动生成的数据库访问客户端,允许你用 JavaScript/TypeScript 编写类型安全的查询语句来操作数据库。
- Prisma Migrate:提供数据库迁移功能,可以管理数据库架构的版本,生成和执行数据库迁移脚本。
- Prisma Studio:一个可视化的数据库管理界面,允许你查看和编辑数据库中的数据。
Prisma 的核心特性
1.类型安全:Prisma 的一个重要特性是自动生成的数据库查询 API 会严格遵循数据库模式(schema)的类型检查,帮助开发者在编译时发现错误,而不是运行时。通过 TypeScript 的强类型检查,减少了手动拼写查询时出现错误的风险。
2.查询构建器:Prisma 使用链式查询构建器,通过函数调用来构建数据库查询,而不是编写原生的 SQL 查询语句。它支持大多数常见的数据库操作,如 CRUD(增、删、查、改),以及更复杂的关联查询、聚合操作等。
3.支持关系型数据库:Prisma 可以与多种关系型数据库兼容,包括:
- MySQL
- PostgreSQL
- SQLite
- SQL Server
- MongoDB(目前在实验阶段)
5.自动化迁移:Prisma Migrate 可以自动生成数据库迁移文件,帮助你管理数据库架构的变化,避免了手动编写 SQL 迁移脚本的繁琐。
6.数据库推断和 Schema:Prisma 使用 schema.prisma 文件来定义数据库模型,并推断数据库表结构。该文件可以帮助开发者快速生成数据库相关的代码,并轻松管理数据库迁移。
安装和配置
1. 安装 Prisma
npm install prisma -g
2. 初始化 Prisma
在项目根目录下,使用 Prisma CLI 初始化 Prisma 配置:
prisma init --datasource-provider mysql
将创建以下文件和目录:
- prisma/schema.prisma:定义数据库模型的文件。
- .env:存储数据库连接字符串的环境变量文件。
3. 配置数据库连接
在 .env 文件中,你需要配置数据库连接字符串。例如,对于 MySQL:
DATABASE_URL="mysql://user:password@localhost:3306/mydatabase"
4. 定义数据库模型
在 schema.prisma 文件中定义你的数据库模型,例如:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
author User @relation(fields: [authorId], references: [id])
authorId Int
}
5. 生成 Prisma Client
完成数据库模型定义后,使用以下命令生成 Prisma Client:
prisma generate
这会根据 schema.prisma 文件自动生成数据库访问代码,并将其放在 node_modules/@prisma/client 中。
使用 Prisma Client 进行数据库操作
生成 Prisma Client 后,你可以开始在应用程序中使用它来进行数据库操作。
- 导入 Prisma Client
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
- 创建数据
async function createUser() {
const user = await prisma.user.create({
data: {
name: 'John Doe',
email: 'john.doe@example.com',
},
});
console.log(user);
}
createUser();
- 查询数据
你可以使用 Prisma Client 来执行查询操作,例如:
async function getUsers() {
const users = await prisma.user.findMany();
console.log(users);
}
getUsers();
- 更新数据
async function updateUser() {
const updatedUser = await prisma.user.update({
where: { email: 'john.doe@example.com' },
data: { name: 'John Doe Updated' },
});
console.log(updatedUser);
}
updateUser();
- 删除数据
async function deleteUser() {
const deletedUser = await prisma.user.delete({
where: { email: 'john.doe@example.com' },
});
console.log(deletedUser);
}
deleteUser();
- 使用关系查询
Prisma 支持关系查询,能够非常方便地进行关联查询。例如,查询一个用户和他的帖子:
const user = await prisma.user.findUnique({
where: { email: 'john.doe@example.com' },
include: { posts: true },
});
console.log(user);
}
getUserWithPosts();
Prisma Migrate(数据库迁移)
Prisma Migrate 用于管理数据库的架构更改。当你对数据库模型进行更改时,Prisma Migrate 会自动生成 SQL 脚本并将其应用到数据库。
-
创建迁移文件
当你修改 schema.prisma 文件后,运行以下命令来生成数据库迁移文件:prisma migrate dev --name your_migration_name
这将生成迁移文件,并将其应用到数据库。
-
查看迁移历史
使用以下命令查看迁移历史记录:prisma migrate status
-
执行数据库迁移
将迁移应用到数据库:
npx prisma migrate deploy
Prisma Studio(可视化数据库管理)
Prisma Studio 是一个可视化界面,用于查看和管理数据库中的数据。
启动 Prisma Studio:
npx prisma studio
然后通过浏览器访问 http://localhost:5555 来管理数据库数据。