TIL.41 Django 추가사항

kimst5418·2020년 11월 15일
0

wecode

목록 보기
25/30

✔ Django ORM

- get_or_create :

해당 자료가 있으면 create 하고 아니면 get 을 함

  # 예시
  In [3]: Subscribe.objects.get_or_create(name='구독')
  Out[3]: (<Subscribe: Subscribe object (2)>, True)

  In [4]: Subscribe.objects.get_or_create(name='구독')
  Out[4]: (<Subscribe: Subscribe object (2)>, False)

  In [5]: type(Subscribe.objects.get_or_create(name='구독'))
  Out[5]: tuple

  # 기본적인 create 나 get ORM 과 달리 출력값이 인스턴스만 나오는 것이
  # 아닌 tuple의 형태로 0 번 인덱스에는 인스턴스가, 1번 인덱스에는 True/false로
  # 데이터 생성시 True, 데이터 Get 시 False 가 반환된다.
  • 2차 프로젝트를 진행하며 문자인증을 하였는데 문자인증시 인증번호를
    저장하기 위해서 사용하였다.
    인증번호를 재전송시 해당 번호는 가장 최신의 인증번호로 최신화 되어야하므로
    get_or_create를 이용해보았다.
  # 사용예시
  phonecheck = PhoneCheck.objects.get_or_create(check_id = data['userCell'])
  phonecheck[0].check_number = check_number
  phonecheck[0].save()

- 여러가지 filter 방법 :

  • __startswith / __istartswith :
User.objects.filter(name__startswith='키워드')
SELECT ... WHERE name LIKE '키워드%';
User.objects.filter(name__istartswith='키워드')
SELECT ... WHERE name ILIKE '키워드%';

=> User 테이블의 name 필드에서 '키워드'로 시작하는 데이터를 필터함

__istartswith 를 사용한다면 대소문자를 구분하지 않고 필터함
  • __endswith / __iendswith :
User.objects.filter(name__endswith='키워드')
SELECT ... WHERE name LIKE '%키워드';
User.objects.filter(name__iendswith='키워드')
SELECT ... WHERE name ILIKE '%키워드';

=> User 테이블의 name 필드에서 '키워드'로 끝나는 데이터를 필터함

__iendswith 를 사용한다면 대소문자를 구분하지 않고 필터함
  • __contains :
User.objects.filter(name__contains='키워드')
SELECT ... WHERE name LIKE '%키워드%';
User.objects.filter(name__icontains='키워드')
SELECT ... WHERE name ILIKE '%키워드%';

=> User 테이블의 name 필드에서 '키워드'가 들어가는 데이터를 필터함

__icontains 를 사용한다면 대소문자를 구분하지 않고 필터함
  • __gt / __gte :
User.objects.filter(age__gt=25)
=> user 테이블의 age > 25 인 데이터 필터

User.objects.filter(age__gte=25)
=> user 테이블의 age >= 25 인 데이터 필터
  • __lt / __lte :
User.objects.filter(age__lt=25)
=> user 테이블의 age < 25 인 데이터 필터

User.objects.filter(age__lte=25)
=> user 테이블의 age <= 25 인 데이터 필터
  • __in :
User.objects.filter(age__in=[23, 24, 25])
SELECT ... WHERE age IN (23, 24, 25);
=> user 테이블의 age 가 23, 24, 25 인 데이터 필터
profile
TIL 기록 일지

0개의 댓글