:models에 적용한 변경 내용을 기반으로 새로운 migrations 파일을 만든다.
: migrations를 적용 및 적용 해제
: 해당 마이그레이션 파일을 DB에 반영!
즉, makimigrations는 장고에서 제공하는 모델의 변경사항들을 감지하고 기록하는 역할을 하고, migrate는 그러한 기록된 파일들과 설정값들을 읽어서 그 변경사항을 db에 저장하는 역할을 한다.
: 기능을 실행하는 명령어는 아니고, migration을 위한 SQL statements를 보여준다.
project의 migrations list와 상태를 보여준다.
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
employee
[X] 0001_initial
notice
[X] 0001_initial
project
[X] 0001_initial
schedule
[X] 0001_initial
sessions
[X] 0001_initial
tip
- makemigrations 이후에는 migration 폴더를 확인하는 습관을 갖는게 좋다. DB는 중요하기 때문에 무엇이 수정되었는지 다시 한번 확인하는 습관.
- makemigrations [app-name] 처럼 app 이름을 명시하는 것이 좋다. (예상치 못한 migration을 방지)
- showmigrations 를 통해서 적용 상태를 조회할 수 있다. [x] : 적용 후 []: 적용 전
- 실제 DB에는 sql 쿼리로 명령이 전달이 된다. migration 파일은 쿼리는 아니다. 따라서sqlmigrate 명령을 통해 sql로도 확인하는 습관이 필요하다.
- 이미 적용한 migration 파일은 절대로 지우면 안된다.
- 프로젝트/앱 생성 후 처음 migrate 할 때는 app 이름을 명시하지 않는다. 이는 장고 기본 앱에, 여러 앱에 걸쳐서 적용할 migrate가 있기 때문이다.
- no such table, column 등의 오류는 migration 관련 문제이다.
어라.......나는 이미 적용한 migration 파일을 지웠는데 ....나는 이제 어떻게 되는거지....