ORM

※참고

  1. 장고걸스(https://tutorial.djangogirls.org/ko/html/)
  2. 유혹하는 개발하기(https://roseline124.github.io/django/2019/04/30/pickmeal-orm.html)











1. 장고 ORM

장고를 데이터베이스에 연결, 데이터를 저장하는 방법




2. ORM(Object-Relational Mapping)

데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법. 객체 지향 언어에서 사용할 수 있는 ‘가상’ 객체 데이터베이스를 구축하는 방법.




3. 쿼리셋(QuerySet)

전달받은 모델의 객체 목록. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬 할 수 있음.

  • 객체를 사용하여 다수의 데이터를 가져오는 함수를 사용할 때 반환 되는 객체.
  • 객체(objects): Model Manager, DB와 Django Model 사이의 질의연산 인터페이스 역할.




4. 입력 순서

이전에 만든 모델, Review를 통해 장고 ORM을 배워보겠습니다.


먼저, 가상 환경을 실행합니다.

  • Windows > myvenv\Scripts\activate
  • Mac > source myvenv/bin/activate


로컬 콘솔에서 아래 명령을 입력합니다.

  • python manage.py shell


그러면, 다음과 같은 문구가 등장할것입니다. (InteractiveConsole)


이제 Review 모델을 불러옵니다.

  • from .models import Review


작성자가 필요하므로, User(사용자) 모델의 인스턴스를 가져와 전달.

  • from django.contrib.auth.models import User


User.objects.all() <QuerySet []>


  • Review.objects.create(author=me, title=‘213버거’, text=‘존맛탱’)


  • Review.objects.all()


5. 필터링 하기

작성자(author)

Review.objects.filter(author=‘작성자입력’) 여기서 조건은 작성자이므로, author=me를 입력.


제목(title)

Review.objects.filter(title__contains=‘내용입력’)

  • title과 contains 사이에 밑줄 2개를 입력해야 한다. 밑줄 한개만 넣으면 오류가 발생한다.


or

Review.objects.filter(name__startswith=) | Review.objects.filter(name__startswith=)


and

Review.objects.filter(name__startswith=) & Review.objects.filter(name__startswith=)


not

django.db.models에서 Q 객체를 import하고, 물결 표시(~)로 not 연산을 실행 할 수 있다. from django.db.models import Q Review.objects.filter(~Q(name__startswith=))


6. 항목의 집계 구하기

from django.db.models import Count, Avg, Min, Max, Sum


7. 정렬하기

쿼리셋은 객체 목록을 정렬 할 수 있다. 디폴트는 오름차순이다. Review.objects.order_by(‘created_date’)


-를 붙여주면, 내림차순 정렬이 가능하다. Review.objects.order_by(‘-created_date’)


8. 쿼리셋 연결하기

Review.objects.filter(published_date__lte=timezone.now()).order_by(‘published_date’)


종료 exit()