supabase와 prisma(2) - prisma CRUD
📌시작하며
이어서 prisma를 이용해 api 작성시, 자주 쓰이는 문법을 살펴보자!
이 글은 아래와 같이 이어집니다.
✅ 공통문법
CRUD를 사용할 때 공통적으로 사용되는 것을 먼저 알아보자.
- prisma를 사용해 DB작업시, PrismaClient 인스턴스를 사용한다.
- 아래 예제에서 볼 수 있듯,
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
를 사용해주면 된다. 예제를 살펴보면
- where 조건문으로, email이(고유식별자)
viola@prisma.io
인 값을 찾는다. - 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
를 이용하면 된다. 이 예제를 살펴보면
- where 조건문으로 email에
prisma.io
가 포함된 records를 찾는다. - 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
를 사용한다. 해당 예제에서는
- where 조건문으로 email 값이
viola@prisma.io
인 record를 찾는다. - 만약 있는 경우 name을 업데이트 한다.
- 만약 해당 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를 살펴보았으니 좀 더 자세한 내용은 분리해서 작성할 예정이다.😎