티스토리 뷰

Python/* Django

5. Migration

포꾼 2017. 12. 12. 14:18

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
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함