CRUD란 Create, Read, Update, Delete 즉, db 테이블의 row들 혹은 row를 생성, 읽기, 업데이트, 삭제하는 방식을 의미한다. 우리가 직접 개발하는 API들이 db의 데이터를 조작하고 가져오는 것이므로 API 개발을 위해서는 CRUD를 못한다면 진정한 백엔드 개발자라고 볼 수 없다.
<클래스명>.objects.create(email=hello123@vel.com, password=12345678)
<클래스명>.objects.all(조건)
< QuerySet [ ] >
.<컬럼이름>
으로 해당 값에 직접적으로 접근 가능하다.a = <클래스명>.objects.get(pk=5)
a.id
# 5
a.name
# 'cat'
a.image_url
# 'cat.jpg'
<클래스명>.objects.filter(조건)
< QuerySet [ ] >
<클래스명>.objects.exclude(조건)
< QuerySet [ ] >
로우의 컬럼 값을 수정 가능하다. 단순히 update 쿼리문을 쓰면 모든 로우에 수정이 이루어 진다. 일부의 로우들만 수정하고 싶을 경우 그 로우들을 쿼리셋으로 불러와서 업데이트 쿼리문을 사용한다.
<클래스명>.objects.update(조건)
홍길동이란 이름을 가진 로우의 전화번호를 수정하고 싶은 경우
<클래스명>.objects.filter(name=홍길동).update(number=01012345678)
delete 쿼리문 또한 update와 비슷하다. 일부의 쿼리셋을 데려오지 않으면 테이블의 모두 로우들을 삭제한다. 그래서 보통을 쿼리문을 또 써서 삭제하고 싶은 로우만 선택해 삭제한다.
<클래스명>.objects.delete()
id가 100인 데이터만 제외한 뒤, 모든 데이터 삭제
<클래스명>.objects.exclude(id=100).delete()
get
이다.get
쿼리문을 사용하면 한 가지 로우(객체)를 가져와서 직접적으로 컬럼 값에 접근할 수 있다.for
문 혹은 list comprehension
을 활용해 각 로우의 컬럼 값에 접근한다.id가 3인 사용자의 객체를 data라는 변수에 담고, 해당 사용자의 이름(컬럼), 전화번호(컬럼) 값을 name, number 변수에 담아 활용 가능하다.
data = User.objects.get(id=3)
name = data.name
number = data.number
사는 곳이 서울인 모든 사용자들(쿼리셋)을 변수 posts에 담은 뒤, list comprehension을 활용해 서울에 사는 사용자들의 전화번호를 담을 리스트를 만든다.
users = User.objects.filter(place=Seoul)
result = [user.number for user in users]