데이터베이스의 테이블이나 테이블 데이터의 내용을 생성, 수정, 삭제 시 사용하는 데이터베이스 문법.
⚡️ 장고는 ORM(object relational mapping)이라는 기능을 제공해 사용자가 쿼리문을 몰라도 파이썬으로 데이터를 다룰 수 있게 해준다
- 같은 목적으로 작성된 쿼리문이라 하더라도 개발자마다 다양한 쿼리문이 만들어지면 통일성이 깨진다.
- 개발자가 쿼리문을 잘못 작성할 시 시스템의 성능이 저하될 수 있다.
- 데이터 베이스 변경 시(ex: MySQL > 오라클) 특정 데이터베이스에 의존하는 쿼리문을 모두 수정해야해 유지 보수에 어려움이 생긴다
⚡️ 장고의 ORM은 1. 데이터베이스 테이블의 모델화, 2.쿼리문 자동생성을 통한 통일성 보장 및 수정 작업 불필요로 위 단점들을 보완한다
__str__
메서드Question이라는 모델의 데이터를 조회할 때 Question.objects.all() 이라는 함수를 사용할 수 있다.
이 때 결과로 반환되는 것은 포함된 QuarySet 객체인데, 해당 객체의 데이터 유형이 출력된다.
이는 사람이 보기 불편하므로__str__
메서드로 id가 아닌 제목을 확인할 수 있다
⚡️ 메서드는 모델의 속성을 추가하거나 변경하는 것이 아니므로 makemigrations, migrate는 수행하지 않는다.
filter 함수는 조건에 부합하는 1개 이상의 데이터를 list 형태의 QuerySet으로 반환한다.
특정한 단 1개의 데이터만을 조회하고 싶다면 get함수를 쓰는 것이 바람직하다.
Question 모델과 Answer 모델을 예시로 들어보자.
👉 Question을 통해 Answer을 참조할 때, 1개의 질문에 여러 개의 답변이 달릴 수 있으므로question.answer_set
으로 조회한다.(답변 세트를 조회)
👉 반대로 Answer를 통해 Question을 참조할 때, 1개의 답변은 1개의 질문에만 연결되어 있으므로answer.question
으로 조회한다.
⚡️ answer쪽은 question의 외래 키를 가지고 있으므로 question의 정보를 알고 있다. 이는 DB Modeling에서도 화살표가 Answer -> Question으로 향하므로 정참조
반대로 question쪽이 answer를 향하는 것은 역참조