ORM (Object - Relational - Mapping)
객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 기술
한쪽이 쓰는 언어로 번역해주는 언어
QuerySet API
ORM에서 데이터를 검색, 필터링, 정렬 및 그룹화 하는데 사용하는 도구
→ API를 사용하여 SQL이 아닌 Python 코드로 데이터를 처리
맨 마지막 Queryset API가 바뀌는 부분!
Query
데이터베이스에 특정한 데이터를 보여달라는 요청
퀴리문을 작성한다. → 원하는 데이터를 얻기 위해 데이터베이스에 요청을 보낼 코드를 작성한다.
파이썬으로 작성한 코드가 ORM에 의해 SQL로 변환되어 데이터베이스에 전달되며, 데이터베이스의 응답 데이터를 ORM이 QuerySet이라는 자료 형태로 변환하여 우리에게 전달
QuerySet
데이터베이스에서 전달받은 객체 목록 (데이터 모음)
Django ORM을 통해 만들어진 자료형, 리스트처럼 사용하면 됨
단, 데이터베이스가 단일한 객체를 반환할 때는 QuerySet이 아닌 모델(Class)의 인스턴스로 반환됨
QuerySet API 는 python의 모델 클래스와 인스턴스를 활용해 DB에 데이터를 저장(C), 조회(R), 수정(U), 삭제(D) 하는 것
Create
Django shell
Django 환경 안에서 실행되는 python shell (입력하는 QuerySet API 구문이 Django 프로젝트에 영향을 미침)
save()
객체를 데이터베이스에 저장하는 메서드
대표적인 조회 메서드
Return new QuerySets
all()
filter()
Do not return QuerySets
get() 특징
객체를 찾을 수 없으면 DoesNotExist 예외를 발생시키고, 둘 이상의 객체를 찾으면 MultipleObjectsReturned 예외를 발생시킴
반드시 하나를 찾을 수 있는 데이터는 pk밖에 없음
→ 위와 같은 특징을 가지고 있기 때문에 primary key와 같이 고유성(uniqueness)을 보장하는 조회에서 사용해야 함
이미 삭제된 pk는 재사용하지 않음
Field lookups
특정 레코드에 대한 조건을 설정하는 방법
QuerySet 메서드, filter(), exclude() 및 get()에 대한 키워드 인자로 지정
ORM, QuerySet API를 사용하는 이유
데이터베이스 쿼리를 추상화하여 Django 개발자가 데이터베이스와 직접 상호작용하지 않아도 되도록 함
데이터베이스와의 결합도를 낮추고 개발자가 더욱 직관적이고 생산적으로 개발할 수 있도록 도움