All Tags
On this page

Prisma操作mysql

#nodejs #database #orm
avatar
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文件

prisma

会自动根据schem文件自动创建对应的sql文件

  • 查看mysql数据库

自动生成了prisma数据库

自动生成了prisma数据库

  • 查看prisma下的表

自动创建了user表

自动创建了user表

增删改查操作

prisma-client-reference

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

prisma studio

  • 点击add record 添加数据,然后点击save 1 change即可