Post

supabase와 prisma(2) - prisma CRUD

📌시작하며

이어서 prisma를 이용해 api 작성시, 자주 쓰이는 문법을 살펴보자!

이 글은 아래와 같이 이어집니다.

✅ 공통문법

CRUD를 사용할 때 공통적으로 사용되는 것을 먼저 알아보자.

  1. prisma를 사용해 DB작업시, PrismaClient 인스턴스를 사용한다.
  2. 아래 예제에서 볼 수 있듯, await prisma 다음의 user는 실제 데이터베이스 User 테이블을 소문자로 작성한 것이다. 만약 데이터베이스가 Post 라면 await prisma.post로 작성해주면 된다.
1
2
3
4
5
6
7
8
9
10
import { PrismaClient, Prisma } from "@prisma/client" 👈

const prisma = new PrismaClient() 👈

const user = await prisma.user👈.create({
  data: {
    email: "elsa@prisma.io",
    name: "Elsa Prisma",
  },
})

✅ Create

레코드를 생성해보자!

➡️ Single record

먼저 single record를 만들어 보자. 간단히 create를 이용하고 내용을 작성해주면 된다.

1
2
3
4
5
6
const user = await prisma.user.create({
  data: {
    email: "elsa@prisma.io",
    name: "Elsa Prisma",
  },
})

➡️ multiple record

createMany 를 사용해 여러 record를 한 번에 만들 수 있다. 이때 unique Key 값이 중복된 경우,skipDuplicates: true 속성을 사용해 해당 data를 건너뛸 수 있다.

예제에서는 email이 unique Key로 현재 name이 Bob인 record와 Bobo가 겹치게 되고, skipDuplicates: true로 인해 해당 내용을 건너뛰게 된다.

1
2
3
4
5
6
7
8
9
const createMany = await prisma.user.createMany({
  data: [
    { name: "Bob", email: "bob@prisma.io" },
    { name: "Bobo", email: "bob@prisma.io" }, // email(unique key)중복
    { name: "Yewande", email: "yewande@prisma.io" },
    { name: "Angelique", email: "angelique@prisma.io" },
  ],
  skipDuplicates: true, // 'Bobo' 데이터를 건너뛴다.
})

✅ Read

내용을 읽어보자!

➡️ ID 또는 고유식별자를 이용해 불러오기

findUnique 를 이용해 single record 값을 읽어올 수 있다. 이때 조건은 where 안에 작성해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// ID 이용하기
const user = await prisma.user.findUnique({
  where: {
    id: 99,
  },
})

// 고유식별자 이용하기
const user = await prisma.user.findUnique({
  where: {
    email: "elsa@prisma.io",
  },
})

➡️ 전체 내용 불러오기

이번엔 findMany를 이용하면 된다.

1
const users = await prisma.user.findMany()

✅Update

➡️ single record 업데이트 하기

간단히 update를 사용해주면 된다. 예제를 살펴보면

  1. where 조건문으로, email이(고유식별자) viola@prisma.io 인 값을 찾는다.
  2. name을 Viola the Magnificent를 업데이트 한다.
1
2
3
4
5
6
7
8
const updateUser = await prisma.user.update({
  where: {
    email: "viola@prisma.io",
  },
  data: {
    name: "Viola the Magnificent",
  },
})

➡️ multiple records 업데이트 하기

이번엔 updateMany 를 이용하면 된다. 이 예제를 살펴보면

  1. where 조건문으로 email에 prisma.io가 포함된 records를 찾는다.
  2. records의 role들을 ADMIN으로 변경한다.
1
2
3
4
5
6
7
8
9
10
const updateUsers = await prisma.user.updateMany({
  where: {
    email: {
      contains: "prisma.io",
    },
  },
  data: {
    role: "ADMIN",
  },
})

➡️ record가 있으면 업데이트, 없다면 생성

만약 특정 record를 찾아서 있다면 값을 업데이트 하고 없다면 생성해야 하는 경우가 있을 수 있다. 이때는 upsert를 사용한다. 해당 예제에서는

  1. where 조건문으로 email 값이viola@prisma.io인 record를 찾는다.
  2. 만약 있는 경우 name을 업데이트 한다.
  3. 만약 해당 record가 존재하지 않는경우 email과 name을 넣어 생성해준다.
1
2
3
4
5
6
7
8
9
10
11
12
const upsertUser = await prisma.user.upsert({
  where: {
    email: "viola@prisma.io",
  },
  update: {
    name: "Viola the Magnificent",
  },
  create: {
    email: "viola@prisma.io",
    name: "Viola the Magnificent",
  },
})

✅Delete

마지막으로 특정 record를 삭제해보자.

➡️ single record 삭제하기

한 개만 삭제하고 싶을 때는 delete와 해당 record를 식별할 조건을 작성해주면 된다.

1
2
3
4
5
const deleteUser = await prisma.user.delete({
  where: {
    email: "bert@prisma.io",
  },
})

➡️ multiple records 삭제하기

여러개를 삭제하고 싶을 때는 deleteMany와 해당 records를 식별할 조건을 작성해주면 된다.

1
2
3
4
5
6
7
const deleteUsers = await prisma.user.deleteMany({
  where: {
    email: {
      contains: "prisma.io",
    },
  },
})

전부 삭제하기

모든 records를 삭제하고 싶은 경우, 조건을 작성하지 않고 deleteMany를 사용한다.

1
const deleteUsers = await prisma.user.deleteMany({})

📩마무리

기본 CRUD를 살펴보았으니 좀 더 자세한 내용은 분리해서 작성할 예정이다.😎

🗂️참고 사이트

This post is licensed under CC BY 4.0 by the author.