INSTALLED_APPS=[
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites",
]
위 앱들이 장고에 기본적으로 설치되어 있으며, migrate을 하면 아래와 같이 해당 테이블들이 생성 된다.
auth_group,
auth_group_permissions,
auth_permission,
auth_user,
auth_user_groups,
auth_user_user_permissions,
django_admin_log,
django_content_type,
django_migrations,
django_session,
django_site
아무 앱도 설치 하지 않고 기본으로 설치되어 있는 앱들에 대한 migrate를 실행했을 때 생성되는 테이블들이다.
django.contrib.sessions
, MIDDLEWARE의 django.contrib.sessions.middleware.SessionMiddleware
가 이에 해당한다.python manage.py makemigrations
__pychace__
디렉토리에 저장 되는 캐시 파일이며 특정 태스크의 속도를 높여 준다.id
(PK)는 장고가 자동으로 생성해 준다.migrate
명령어를 실행하면 migrations 파일들이 SQL 코드로 번역 된다.python manage.py sqlmigrate <앱명> <마이그레이션 번호>
0001_initial.py
면 0001이 되며 0002_auto_20220103.py
면 0002가 된다.python manage.py showmigrations
account
[X] 0001_initial
[X] 0002_email_max_length
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
[X] 0003_logentry_add_action_flag_choices
agreements
[ ] 0001_initial
[ ]
안에 X 표시가 들어가 있지 않다면 아직 commit 되지 않은 것이다.python manage.py migrate
이 명령어를 실행하면 migration 파일에 있는 내용들이 sql 코드로 실행되어 테이블이 생성 된다.
또한, migration과 관련 있는 다른 테이블들에 해당 내용들이 기록된다.
만약 migration을 rollback 하고 싶다면 어떻게 해야 할까?
예를 들어, “blogs” 앱에 두 개의 migration 파일이 있다고 하자.
0001_initial.py
0002_auto_20201008_2208.py
0002까지 migrate을 실행했는데 0001로 되돌려야 한다면 아래의 명령어를 실행하면 된다.
python manage.py migrate blogs 0001
즉, python manage.py migrate <앱 명> <마이그레이션 번호>
가 필요하다.
그러면 아래와 같은 결과가 나온다.
여기서 또다시 0001로 돌아가고 싶다면 아래와 같이 하면 된다.
python manage.py migrate blogs 0001 --plan
--plan
명령어를 이용하면 어떤 migration으로 돌아갈 지 명시한다.위 명령어를 실행한 상태에서 0002를 다시 migrate 한다.
python manage.py migrate blogs 0002
만약 여기서 다시 0001로 돌아가고 싶다면?
python manage.py migrate blogs 0001 --plan
을 하면 된다.