View
Select
- 객체 하나만 찾기: get()
User.objects.get(id=34100)
조건이 일치하는 객체 하나를 리턴한다. (따라서 PK로 조회하는 것을 추천한다)
리턴값이 2개 이상일 때는 에러가 발생한다.
Return type이 쿼리셋이 아닌 객체이기 때문에 속성에 접근 가능하다
- 조건에 맞는 객체를 모두 가져오기: filter()
User.objects.filter(age=20)
리턴값은 쿼리셋이다.
이때 username에 'so'가 들어간 유저들을 가져오고 싶다면: __contains
User.objects.filter(username__contains="so")
- __icontains: __contain과 비슷하지만 대소문자를 구분하지 않고 가져온다
- __startwith, __endwith: 특정 문자로 시작하는/끝나는 객체 반환
- __gt, __lt: 특정 값보다 큰/작은 객체 반환
- __isnull: 필드값이 null인 객체 반환 (Ex. age__isnull=True)
- __in: 문자열들 중 포함하는 값이 있다면 반환 (Ex. username__in=['Kim', 'Park'])
- __year, __month, __day, __date: 특정 날짜와 일치하는 객체 반환
AND, OR을 사용하여 여러 조건을 사용할 수 있다
# 방법 1
User.objects.filter(age__gt=20) & User.objects.filter(username__contains='park')
# 방법 2: django의 Q 객체로 표현
User.objects.filter(Q(age__gt=20) & Q(username__contains='park'))
- 모든 객체 조회하기: all()
User.objects.all()
- 정렬해서 가져오기: order_by()
User.objects.order_by('joined_date')
앞에 `-`을 붙여주면 내림차순 정렬이다.
User.objects.order_by('-joined_date')
- 데이터의 개수 가져오기: count()
예를 들어 User 테이블에 있는 데이터 수를 가져올 수 있다.
User.objects.count()
- 데이터가 있는지 확인: exists()
User.objects.filter(username="soeun").exists()
데이터가 있으면 True를 반환한다.
- [Shortcut functions] 조회했는데 존재하지 않으면 404 반환: get_object_or_404()
user = get_object_or_404(User, pk=1234)
원래는 try-catch문으로 예외를 잡아주어야 하지만, get_object_or_404() 메소드로 짧게 표현할 수 있다.
기존 코드는 다음과 같다.
try:
user = User.objects.get(id=1234)
except User.DoesNotExist:
raise Http404("No User matches the given query.")
Insert
- 새로운 객체를 DB에 생성하기: create()
User.objects.create(username="soeun", age=20)
- 테이블에서 객체를 찾아보고, 없으면 생성하기: get_or_create()
user, result = User.objects.get_or_create(username="soeun")
return 타입은 Tuple이다
- user: 새로 생성했거나 조회한 User 객체
- result: True이면 새로 생성했음, False이면 기존의 데이터를 조회한 것.
Delete
- 객체 삭제하기: delete()
삭제하기 위해서는 삭제할 객체를 get 메소드 등으로 불러와야 한다.
delete_object = User.objects.get(id=11)
delete_object.delete()
Update
- 객체 업데이트하기: save()
# user 객체의 값 변경...
user.save()
Queryset Chaining
여러 쿼리셋을 연결할 수 있다
User.objects.filter(username="soeun").order_by('joined_date')
Reference
'Develop > 톺아보기' 카테고리의 다른 글
[Windows] 포맷 후 개발 환경 세팅 (0) | 2023.08.31 |
---|---|
[Django] 장고 ORM Queryset(2) (0) | 2023.08.15 |
[CI/CD] Github Actions(3) Django CD, EC2 연결 (0) | 2023.07.26 |
[CI/CD] Github Actions(2) Django CI 및 Error 해결, github secrets 사용 (0) | 2023.07.26 |
[CI/CD] Github Actions(1) 공식문서로 톺아보기, 간단한 예제 (0) | 2023.07.23 |
reply