[django][ORM] db에서 모든 필드 가져오지말고 몇개만 가져오기

Hyeseong·2020년 12월 26일
0

django

목록 보기
22/35

Tones and I - Dance Monkey

알고 듣는 노래~

2019년 5월 10일, Tones And I는 두 번째 싱글인 "Dance Monkey"를 발표했다. 이 노래는 호주, 오스트리아, 벨기에, 캐나다, 중국, 덴마크, 핀란드, 프랑스, 독일, 아일랜드, 이탈리아, 일본, 말레이시아, 네덜란드, 뉴질랜드, 노르웨이, 포르투갈, 남아프리카, 스웨덴, 스위스 및 영국을 포함한 30개국 이상의 음악 차트에서 1위를 차지했다. 그리고 그해 11월 호주에서 그녀는 16주 1위라는 대기록을 달성하며 ARIA Singles Chart에서 최장기간 1위 기록을 세웠다.[3] 그리고 후에 1위를 더 하며 Dance Monkey는 호주에서 23주 1위를 찍었다


쿼리 할 때 마다 모든 값을 가져올 필요가 없습니다. 그래서 우리는 DB에서 특정 테이블을 선택하여 값을 제한해서 가져오듯이~~

테이블에서도 특정 로우의 컬럼만 콕!콕!콕! 짚어서 가져 올 수 있어요.

  • values() and values_list() 대개 속성들 3~4개 정도 가져올때 사용해유~
  • 'only()` db에서 딱! 이 컬럼(텍스트필드)만 꺼낼때 사용해요. 퍼포먼스 UP~!

잠깐만!

values()와 values_list() 차이?

  • values(){key:value} 형태로 dictionary이고요.
  • values_list() 튜플형태로 값들이 리스트에 저장되어 반환되요.

방법1

value() and values()

>>> User.objects.filter(first_name__startswith='R').values('first_name','last_name')
<QuerySet [{'first_name': 'Ricky', 'last_name': 'Dayal'}, {'first_name': 'Ritesh', 'last_name': 'Deshmukh'}, {'first_name': 'Radha', 'last_name': 'George'}, {'first_name': 'Raghu', 'last_name': 'Khan'}, {'first_name': 'Rishabh', 'last_name': 'Deol'}]>


>>> User.objects.filter(first_name__startswith='R').values_list('first_name','last_name')
<QuerySet [('Ricky', 'Dayal'), ('Ritesh', 'Deshmukh'), ('Radha', 'George'), ('Raghu', 'Khan'), ('Rishabh', 'Deol')]>


>>> str(User.objects.filter(first_name__startswith='R').values_list('first_name','last_name').query)
'SELECT "auth_user"."first_name", "auth_user"."last_name" FROM "auth_user" WHERE "auth_user"."first_name" LIKE R% ESCAPE \'\\\''

방법2

only()

>> queryset = User.objects.filter(
    first_name__startswith='R'
).only("first_name", "last_name")

SELECT "auth_user"."id", "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user" WHERE "auth_user"."first_name"::text LIKE R%

only 메서드가 values 메서드와 다른 점은 id 필드를 함께 가져온다는 점 뿐입니다.

profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글