C : Create
R : Read
U : Update
D : Delete
Object-Relational-Mapping (오브젝트 맵퍼)
Python에만 있는것이 아니라 JavaScript에도 있다.
언어의 객체와 DB의 테이블이 매칭되는 기능이다.
> 한개의 클래스가 한개의 DB 테이블이 된다.
> 클래스 내에서 할당되는 각각의 변수가 컬럼이 된다.
> 장고는 id를 생략하고 table을 만들면 자동으로 생성해준다.
ORM -> DB table (Migration)
makemigrations : 데이터베이스의 설계도를 만드는 명령어 뒤에 앱 이름을 붙여 해당앱의 migration을 할 수도 있다.
migrate : 만든 migration의 적용!, 실제로 table을 만드는 단계.
> DB를 별도로 수정하게 되면 migration파일과 내용이 달라져 DB가 꼬이게된다.
(반드시 협의, 필요 하에 진행해야한다.)
create 메서드는 속성값을 전부 선언해줘야한다.
(기본적으로 빈칸을 두지 않고 전부 채워야한다. 단, 컬럼의 속성값으로 null=true나 dafault값을 지정해주면 비워두어도 메서드 사용이 가능하다.)
다른 방법으로 모델의 instance를 생성하고 save함수를 통해 만들 수도 있다.
값을 읽어오는 메서드는 기본적으로 크게 get, all, filter가 있다.
QuerySet은 리스트와 비슷한 성질을 갖고 있기 때문에 for문으로 순회할 수 있다.
update는 QuerySet을 대상으로 하는 명령어로, QuerySet을 Reading하여 나오는 인스턴스 뒤에 update 메서드를 사용하면 읽어온 전체 쿼리셋에 업데이트 된다.
객체 하나도 가능하고, 쿼리셋에도 사용할 수 있다.
대상값 뒤에 delete()를 붙여준다.
메서드를 사용할 때, 주의할 점은 메서드가 어떤 반환값을 주는지에 대한 것을 알고 있어야 한다는 점이다. 메서드별로 반환값의 데이터 타입이 다르기 때문에 경우에 따라 쓸 수 없는 메서드도 있다.
예를 들어 get을 썼을 때, 0개 또는 2개 이상의 값을 가져오도록 설정하면 에러가 발생한다.
(500 서버 에러가 발생할 수 있다)
이러한 부분은 예외처리를 통해 외부적으로 나가지 않도록 설계해야 한다.
사진을 눌렀을 때, 표시
사진에 id값을 주고 그 id값으로 DB의 데이터를 가져오게 한다.