Prisma操作mysql
#nodejs #database #orm
jerrywu001
创建时间:2023-09-04 07:16:13
Prisma 是一个开源的下一代 ORM。它由以下部分组成:
- Prisma Client:用于 Node.js 和 TypeScript 的自动生成和类型安全的查询构建器
- Prisma Migrate:迁移系统
- Prisma Studio : 用于查看和编辑数据库中数据的 GUI
可以打开官网了解一下,话不多说,直接上实战教程(省略mysql的安装):
初始化项目
必要操作
npm i -y
mkdir src prisma
touch tsconfig.json prisma/schema.prisma
安装依赖
npm i prisma @prisma/client typescript @types/node -D
tsconfig.json
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"target": "ES2018",
"module": "commonjs",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
},
"exclude": ["dist"],
"include": ["src"]
}
schema.prisma
用于链接数据库 & 定义表结构
datasource db {
provider = "mysql"
url = "mysql://root:123456@localhost:3306/prisma"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
Prisma Client
后续操作都基于它
npx prisma generate
# 生成的路径: node_modules\.prisma\client
Prisma migrate
基于prisma/schema.prisma,初始化数据库和数据库对应的表 prisma-migrate
npx prisma migrate dev --name init
划重点:如果修改了prisma/schema.prisma,需要重新执行命令:
npx prisma generate
npx prisma migrate dev --name init
- 此时prisma文件夹下会多出一些文件,并自动根据schem文件自动创建对应的sql文件
- 查看mysql数据库
自动生成了prisma数据库
- 查看prisma下的表
自动创建了user表
增删改查操作
insert
向user表中添加记录
touch insert-user.ts
// insert-user.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient({});
async function main() {
// const result = await prisma.user.create({
// data: {
// email: 'tom@test.io',
// name: 'tom',
// },
// }); // 插入重复数据时,会报错
// or
const result = await prisma.user.createMany({
data: [
{
email: 'tom@test.io',
name: 'tom',
},
],
skipDuplicates: true, // 插入重复数据时,不会报错
});
console.log(result);
}
main()
.catch((e) => {
console.log(e);
})
.finally(async () => {
await prisma.$disconnect();
});
insert-user.ts
# 运行
npx ts-node src/insert-user.ts
此时插入了两条数据
update
更新id为1的user name
touch update-user.ts
// update-user.ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient();
async function main() {
const user = await prisma.user.update({
where: {
id: 1,
},
data: {
name: 'Peters',
},
});
console.log(user);
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
update-user.ts
# 运行
npx ts-node src/update-user.ts
更新成功
find
查找id为1的user
touch find-user.ts
// find-user.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
// await prisma.user.findMany(); // 查询全部记录
const returnUser = await prisma.user.findUnique({
where: {
id: 1,
},
});
console.dir(returnUser, { depth: Infinity });
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
find-user.ts
# 运行
npx ts-node src/find-user.ts
查询结果
delete
删除id为2的user
touch find-user.ts
// delete-user.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
// await prisma.user.deleteMany(); // 删除全部记录
const user = await prisma.user.delete({
where: {
id: 2,
},
});
console.log(user);
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
delete-user.ts
# 运行
npx ts-node src/delete-user.ts
删除成功
可视化数据操作
npx prisma studio
- 点击add record 添加数据,然后点击save 1 change即可