Notice
Recent Posts
Recent Comments
Link
오늘도 개발
Django와 데이터베이스 - 2) 마이그레이션(migration) 본문
1. Migration이란?
migration은 urls.py에 작성한 파이썬 클래스(모델)를 데이터베이스의 테이블로 바꿔주는 작업이다.
이 작업을 하는 코드를 migration이라고도 한다.
makemigrations을 하면 Django ORM으로 migration 코드가 생성된다. (migrations 폴더에 생기는 코드가 migration이다.)
migrate을 하면 migration 코드가 실행되어 데이터베이스에 테이블을 만든다.
2. 마이그레이션 과정
1) settings.py의 INSTALLED_APPS에 앱 추가
한 앱에서 마이그레이션을 하려면 settings.py의 INSTALLED_APPS 리스트에
해당 앱의 이름을 저장해야 한다.
migrate 명령을 내리면 장고는
1) settings.py의 INSTALLED_APPS 리스트를 찾아
2) 리스트에 있는 앱에 대해서만 마이그레이션을 실행하기 때문이다.
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog' # 마이그레이션 할 앱 추가
# blog.apps.BlogConfig로 작성해도 됨
]
2) Make migrations
모델 바탕으로 migration 코드를 생성하는 과정.
생성한 코드는 migration 폴더에 저장된다.
<터미널>
앱 이름(ex. blog)을 명령문 끝에 추가하면 앱에 대한 마이그레이션만 생성.
앱 이름 추가하지 않으면 전체 앱에 대한 마이그레이션 생성.
python3 manage.py makemigrations blog
<결과>
Migrations for 'blog':
blog/migrations/0001_initial.py
- Create model Users
- Create model Posts
3) Migrate
생성한 migration 코드를 실행하는 과정.
Django ORM이 migration 코드를 자동으로 SQL로 바꾼 후 쿼리를 실행한다.
실행 완료 후 데이터베이스에 테이블이 생성된다.
<터미널>
python3 manage.py migrate
<결과>
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying blog.0001_initial... OK
Applying sessions.0001_initial... OK
3. 마이그레이션 리셋
한 번도 마이그레이션 하지 않은 상태로 마이그레이션이 리셋됨.
migrate해도 db에 반영되지 않는 경우 실행.
python manage.py migrate --fake myappname zero
이후 migrate 다시 실행
python manage.py migrate'웹 프로그래밍 > Django' 카테고리의 다른 글
| 정참조, 역참조, related_name (0) | 2022.07.06 |
|---|---|
| ManyToManyField VS ForeignKey (0) | 2022.07.05 |
| Django와 데이터베이스 - 1) Django 모델(Model) (0) | 2022.06.30 |
| Django와 데이터베이스 - 0) Django ORM (0) | 2022.06.29 |
| Django 개요 - 기본 개념, 프로젝트 세팅 (0) | 2022.06.28 |