티스토리 뷰
Migrations
• django-south 프로젝트가 킥스타터 펀딩 (£17,952, 507 Backers)을 통해, Django 1.7에 포함
• 모델 변경내역 히스토리 관리
• 모델의 변경내역을 Database Schema (데이터베이스 데이터 구조)로 반영시키는 효율적인 방법을 제공
마이그레이션 관련 명령어
> python3 manage.py makemigrations <app-name> # 마이그레이션 파일 생성 > python3 manage.py migrate <app-name> # 마이그레이션 적용 > python3 manage.py showmigrations <app-name> # 마이그레이션 적용 현황 > python3 manage.py sqlmigrate <app-name> <migration-name> # 지정 마이그레이션의 SQL 내역 |
마이그레이션 파일 생성 및 적용
1. 마이그레이션 파일 (초안) 생성하기 : makemigrations 명령
2. 해당 마이그레이션 파일을 DB에 반영하기 : migrate 명령
모델 클래스 정의 > makemigrations을 통한 마이그레이션 파일 생성 > migrate를 통한 데이터베이스 생성
(중요)
- makemigrations 이후 앱/migration 디렉토리 확인. 무엇이 추가/수정/삭제 되는지 확인이 필요함 - makemigrations [app-name] 처럼 app 이름을 명시 - showmigrations 를 통해서 적용 상태 조회 가능 [x] : 적용 후 []: 적용 전 - sqlmigrate 명령을 통해 sql로도 확인 - 이미적용된 migration 파일 삭제 하면 안됨. - no such table, column 등의 오류는 migration 관련 문제 |
마이그레이션 Migrate (Forward)
# 미적용 마이그레이션 파일부터 최근 마이그레이션 파일까지 순차적으로 진행 > python3 manage.py migrate <app-name> |
마이그레이션 Migrate (Backward) [롤백]
# 지정된 마이그레이션 파일이 현재 적용된 보다 전이라면 backward 마이그레이션 > python3 manage.py migrate <app-name> <마이그레이션 파일> |
마이그레이션 파일명 지정
- 전체파일명을 입력하지 않더라도 판독이 가능하면 파일명 일부로도 입력 가능
blog/migrations/0001_initial.py > python3 manage.py migrate blog 0001 # 롤백 가능, 왠만하면 full_name입력하자 |
- 롤백 후 돌아오면 테이블의 데이터는 사라짐, 데이터 백업 미지원 (주기적인 백업 필요함)
SQLiteBrowser를 통해 SQLITE 데이터 베이스 확인 SQLiteBrowser
id필드란?
• 모든 데이터베이스 테이블에는 각 Row 의 식별기준인 "기본키(Primary Key)" 가 필요
• Django 에서는 기본키로서 id 필드(AutoField)가 디폴트 지정 ( 1씩 순차적으로 증가)
• 기본키는 줄여서 pk 로도 접근 가능 (primary key)
기존 모델 클래스의 필수필드를 추가하여 makemigration 수행 시
- 필수 필드를 추가하므로, 기존 Row들에 필드를 추가할때 어떤값을 채워넣을지 묻는다.
- (선택 1) 지금 값을 입력한다.
- (선택 2) 모델 클래스를 수정하여 디폴트 값을 제공한다.
You are trying to add a non-nullable filed 'author' to post without a default; we can't do taht (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit, and let me add a default in models.py Select an option : 1 Please enter the default value now, as valid Python The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now() >>> 'anonymous' ## 모델클레스에 정의한 필드값에 맞춰서 입력한다. |
"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""
'Python > * Django' 카테고리의 다른 글
7. 모델을 통한 데이터 CRUD (0) | 2017.12.12 |
---|---|
6. Django Admin (0) | 2017.12.12 |
4. Django Model과 Model Fields (0) | 2017.12.12 |
3. View Overview (0) | 2017.12.12 |
2. URL Conf 및 정규표현식 (1) | 2017.12.11 |