📌 이 포스팅에서는 values, values_list, only에 대해서 정리하였습니다.
🔥 SQL에서 필요한 column만 지정하는 방법
🔥 only 메서드
🔥 values 메서드와 values_list 메서드
✔️ SQL문에서 필요한 column만 가져오려면 SELECT * FROM
의 * 대신 column명을 명시한다.
✔️ 불필요한 DB조회를 줄이기 때문에 최적화에 도움준다.
mysql>>> SELECT 'id', 'email' FROM accounts WHERE id < 5;
✔️ 불필요한 column을 제외하고 조회하는 방법은 아래 2가지를 사용한다.
- 🚀 방법1:
only 메서드
- 🚀 방법2:
쿼리셋의 values 메서드와 values_list 메서드
✔️ only 매서드 안에 column을 지정해준다.
Account.objects.filter(id__lt = 5).only("id", "username")
✔️ values 매서드는 기본적으로 해당하는 key와 value를 딕셔너리로 반환한다.
>>> Account.objects.filter(id__lt=5).values() # [{'id': 1, 'username': '장재원', 'email': 'jaewon@gmail.com', 'sex': 'male', 'age': 32}, {'id': 2, ..}, {'id': 3,..}, {'id': 4, ..}]
✔️ values 매서드 안에 column 값을 넣으면 해당 column들만 key와 value로 반환한다.
>>> Account.objects.filter(id__lt=5).values('id', 'username') # [{'id': 1, 'username': '장재원'}, {'id': 2, ..}, {'id': 3,..}, {'id': 4, ..}]
✔️ values_list는 key와 value가 아닌, tuple 형태의 column쌍으로 반환한다.
>>> Account.objects.filter(id__lt=5).values_list('id', 'username') # [(1, '장재원'), (2, '사민준'), (3, '나혜진'), (4, '장영은')]
✔️ flat은 False가 defualt이며, True값을 주면 된다.
Account.objects.filter(id__lt=5).values_list('username', flat=True).order_by('username') # ['나혜진', '사민준', '자영은', '장재원']