※참고
- 장고걸스(https://tutorial.djangogirls.org/ko/html/)
- 유혹하는 개발하기(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()