[django][ORM] And 연산

Hyeseong·2020년 12월 25일
0

django

목록 보기
19/35

이전 OR연산자에 이어 두번째입니다.
이번에는 AND연산자를 한번 조져 볼게요.

And 연산자

and 연산으로는 조건1, 조건2 둘중 하나만 만족하는게 아니라!!!

조건1과 조건2 두 마리 토끼를 잡으려는 욕심 많은 녀석이라는거! 차이를 이해하셔야해요.

이름이 R로 시작하고 성이 D로 시작하는 모든 사용자를 한번 조져볼까요?

세가지 방법

  • filter(<condition_1>, <condition_2>)
  • queryset_1 & queryset_2
  • filter(Q(<condition_1>) & Q(<condition_2>))

    1. SQL

    sql도 필히 알아야해요. 특히 db와 관련이 제로!라고 자신하는 직무를 제외하고는 SQL은 필히!필히! 알아야한다는거 (⌐■_■)
    select username, first_name, last_name, email from auth_user where first_name like 'R%' and last_name like 'D%';
    걍 중간에 and 있는거 보이조?

    2. django ORM with 쌩filter

    queryset_1 = User.objects.filter(first_name__startswith='R', last_name__startswith='D')

    3. django ORM with & 연산자

    & 연산자 요넘이 and와 동일한 의미를 가지고 있다는거~
    queryset_2 = User.objects.filter(first_name__startswith='R') & User.objects.filter(last_name__startswith='D')


요건 놓칠 수 없는 TIP 1

feat.django shell

django shell에서 화면 너무 뺵빽하면 한번 밀고 싶조? 그때 싹~ clear해줍니다.

Import os
 
os.system("clear") # Linux - OSX
os.system("cls") # Windows 

요것도 놓칠 수 없는 TIP 2

feat. sqlite3

화면 쏵~ 밀어줍니다.

> .shell clear;

4. django ORM with Q객체

Q객체 쓴다고 filter 아예 안쓰는거 아니에요~

queryset_3 = User.objects.filter(Q(first_name__startswith='R') & Q(last_name__startswith='D'))

5. ORM에서 만든 SQL확인

언제나 django orm에서 만든 SQL을 확인하는 습관은 오류도 잡고 실력도 키우는 누이 좋고 매부좋고 도랑치고 가재잡는 그런 역할이 된다는 사실¯_(ツ)_/¯

>>> str(queryset_3.query)
'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE ("auth_user"."first_name" LIKE R% ESCAPE \'\\\' AND "auth_user"."last_name" LIKE D% ESCAPE \'\\\')'

>str(queryset_1.query) == str(queryset_2.query) == str(queryset_3.query)

#Output: True
profile
어제보다 오늘 그리고 오늘 보다 내일...

0개의 댓글