관리 메뉴

웹개발자의 기지개

[Django] 마이그레이션 삭제 (특정앱 부분 다시 마이그레이션) 본문

python/Django

[Django] 마이그레이션 삭제 (특정앱 부분 다시 마이그레이션)

http://portfolio.wonpaper.net 2022. 4. 20. 18:07

마이그레이션을 처리하다가 중간에 꼬여서 특정 테이블을 다시 만들고 해야 했는데,

이때 기존의 마이그레이션 처리와 꼬여서 해당 앱의 마이그레이션 삭제 후 조치 작업이 필요하였다.

 

필자는 테스트용 프로젝트내에 있는 member 앱에 대하여 적용시켜 보았다.

 

1. 먼저 현재 마이그레이션 내역 확인한다.

python manage.py showmigrations

 

 

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
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
member
 [X] 0001_initial
 [X] 0002_alter_member_options
sessions
 [X] 0001_initial
 
cs

 

2. member 앱의 마이그레이션 파일을 초기화 한다.

python manage.py migrate --fake member zero

 

1
2
3
4
5
6
Operations to perform:
  Unapply all migrations: member
Running migrations:
  Rendering model states... DONE
  Unapplying member.0002_alter_member_options... FAKED
  Unapplying member.0001_initial... FAKED
cs

다시 마이그레이션 상태확인

python manage.py showmigrations

 

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
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
member
 [ ] 0001_initial
 [ ] 0002_alter_member_options
sessions
 [X] 0001_initial
cs

member 부분에 x 가 빠져있다.

 

3. member 앱의 마이그레이션 디렉토리 안에 __init__.py 파일을 빼고 모두  직접 수동 삭제한다.

다시 마이그레이션 상태확인

python manage.py showmigrations

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
member
 (no migrations)
sessions
 [X] 0001_initial
cs

 

member 앱에는 마이그레이션이 없어졌다.

 

4. 마이그레이션 만들기

python manage.py makemigrations

 

1
2
3
4
Migrations for 'member':
  member/migrations/0001_initial.py
    - Create model Member
 
cs

 

5. 페이크 마이그레이션 적용하기

python manage.py migrate --fake-initial

 

1
2
3
4
5
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, member, sessions
Running migrations:
  Applying member.0001_initial... OK
 
cs

기존에 테이블이 이미 있는데, 이를 페이크 형태로 적용시키는 방식이다.

 

6. 마이그레이션 최종 확인

python manage.py showmigrations

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
 [X] 0003_logentry_add_action_flag_choices
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
 [X] 0010_alter_group_name_max_length
 [X] 0011_update_proxy_permissions
 [X] 0012_alter_user_first_name_max_length
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
member
 [X] 0001_initial
sessions
 [X] 0001_initial
cs

 

 

참고 : https://wikidocs.net/9926

Comments