[Django] Migration 사용
2018. 8. 23. 14:55
반응형
[Django] Migration 사용
▼ 명령어
1 2 3 4 5 6 7 8 9 10 11 | # 마이그레이션 파일 생성 $ python manage.py makemigrations <app-name> # 마이그레이션 적용 $ python manage.py migrate <app-name> # 마이그레이션 적용 현황 $ python manage.py showmigrations <app-name> # 지정 마이그레이션의 SQL 내역 python manage.py sqlmigrate <app-name> <migration-name> | cs |
마이그레이션 생성법 및 반영
- 마이그레이션 파일 (초안) 생성하기 : makemigrations
- 해당 마이그레이션 파일을 DB에 반영하기 : migrate
▼ 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 관련 문제이다.
▼ 마이그레이션 migrate 롤백
일반적인 migrate
1 | $ python manage.py migrate <app-name> | cs |
- 미적용 마이그레이션 파일 부터 최근 마이그레이션 파일까지 Forward 마이그레이션을 순차적으로 수행한다.
특정 파일지정을 통한 migrate
1 | $ python manage.py migrate <app-name> <마이그레이션 파일명> | cs |
- 지정한 마이그레이션 파일이 현재 적용된 마이그레이션 파일 보다
- 이후라면, Forward 마이그레이션 을 순차적으로 진행
- 이전이라면, Backward 마이그레이션 을 순차적으로 진행 (롤백)
▼ 마이그레이션 파일지정
- 전체 파일명을 지정하지 않더라도, 판독이 가능하다면 파일명 일부로도 지정이 가능하다.
롤백 후에 돌아오면 테이블의 데이터레코드가 사라짐. 장고 모델의 migration은 스키마의 형상관리로, 데이터 백업을 지원하지 않는다.
따라서 주기적인 백업이 필요하다.1234567# 파일명 예시blog/migrations/0001_initial.pyblog/migrations/0002_create_field.pyblog/migrations/0002_update_field.pypython manage.py migrate blog 0001 # OKpython manage.py migrate blog 0002 # FAIL (다수 파일 해당)cs
▼ ID 필드
- 모든 데이터베이스 테이블에는 각 Row의 식별 기준인 기본키(Primary Key) 가 필요
- Django에는 기본키로 id(AutoField)가 디폴트로 지정되어 있음 (AutoField : 1부터 시작해서 값이 1씩 증가하는 것)
- 기본키는 줄여서 pk로도 접근 가능 (primary key)
▼ 기존 모델 클래스에 필수 필드 추가
- 필드옵션 blank, null의 디폴트 값은 False이다. 따라서 기본적으로 모든 필드는 필수 필드이다.
- 만약 새로운 필수 필드를 추가해서 makemigrations를 수행하면, 기존에 있는 레코드에 대해서 어떤 값을 채워 넣을지 설정해야한다.
- 선택 1 : 지금 값을 입력
- 선택 2 : 모델 클래스를 수정하여 디폴트 값을 제공
반응형
'Program > Python' 카테고리의 다른 글
[Python] Django / Admin, SuperUser, User 비밀번호 변경 (0) | 2019.01.10 |
---|---|
[Ddjango] 삭제된 테이블 복구 방법 Django : Table doesn't exist (0) | 2018.08.25 |
[Python] 파이썬 공부_예제 및 강의 프로그래머스 (1) | 2018.04.26 |
[Python] 파이썬 공부하기 첫걸음_책추천 (0) | 2018.04.20 |
[python]장고개발 환경설정 및 리눅스 운영서버에 설치 (0) | 2018.04.15 |