django migrate 초기화 -2 (최후의 방법)

dingdong·2022년 1월 17일
0

django migrate

목록 보기
2/2

해당 방법을 사용하면 데이터 날라갑니다. migrate 문제 발생시 최후의 방법입니다.



django migrate 초기화 (최후의 방법)

해당 방법은 migrate 초기화를 해도 안될때 사용하는 방법입니다.
해당 방법은 DB의 데이터를 날리기 때문에 💣
데이터를 날리면 안 된다면 아래의 방법을 사용하지마세요.

1) python manage.py showmigrations <앱 이름>

  • 현재 migrations 내역을 확인합니다.
  • 0001_initial, 0002_post_author 에 [x] 가 되어있다. (migrate 적용된 상태)
(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py showmigrations blog1
blog1
 [X] 0001_initial
 [X] 0002_post_author
(venv) root@km-VirtualBox:~/django-with-react-study#

2) migrate 초기화 or 특정시점

2-1) migrate 초기화

  • zero 는 migrations 처음 상태로 돌아감.
    - __init__.py 까지 돌아감.
    - __init__.py 은 남아있어야됨.
    - 0001_initial, 0002_post_author 에 [ ] 로 되어있어야된다.

    python manage.py migrate --fake <앱 이름> zero


(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py migrate --fake blog1 zero
Operations to perform:
  Unapply all migrations: blog1
Running migrations:
  Rendering model states... DONE
  Unapplying blog1.0002_post_author... FAKED
  Unapplying blog1.0001_initial... FAKED
(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py showmigrations blog1
blog1
 [ ] 0001_initial
 [ ] 0002_post_author
(venv) root@km-VirtualBox:~/django-with-react-study#

2-2) migrate 특정 시점

  • Ex) python manage.py migrate --fake blog1 002

python manage.py migrate --fake <앱 이름> <마이그레이션 지점>

3-1) 초기화 경우: __init__.py만 남기고 나머지 파일들을 다 지우기

  • migrations 폴더에 __init__.py 를 제외하고 다 삭제
rm blog1/migrations/0001_initial.py

rm blog1/migrations/0002_post_author.py

3-2) migrate 특정 시점

  • 돌아간 시점의 이후 migrate 파일 삭제
    Ex) 002 로 돌아갔다면
    003 파일 삭제,
    004 파일 삭제,
    005 파일 삭제 ....
     

4) DB도 migration 파일과 Sync를 맟춘다.

  • Ex) sqlite3 DB 를 사용
    blog_post 테이블을 삭제한다. (migration 초기화 시켰던 app이 blog_post 였기 때문에.
    그리고 나는 초기(zero)로 돌렸으니 테이블을 삭제해야한다.)
    - 단 테이블을 날렸으니
    테이블에 등록한 데이터도 날라간다.

(venv) root@km-VirtualBox:~/django-with-react-study# sqlite3  db.sqlite3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> DROP TABLE blog1_post;
sqlite>

5) python manage.py makemigrations <앱 이름>


(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py makemigrations blog1
Migrations for 'blog1':
  blog1/migrations/0001_initial.py
    - Create model Post

6) python manage.py migrate <앱 이름>

(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py migrate blog1
Operations to perform:
  Apply all migrations: blog1
Running migrations:
  Applying blog1.0001_initial... OK
(venv) 

6) python manage.py showmigrations <앱 이름>

  • migrate 가 적용되었는지 확인한다.
    • [X] 0001_initial
(venv) root@km-VirtualBox:~/django-with-react-study# python manage.py showmigrations blog1
blog1
 [X] 0001_initial
(venv) root@km-VirtualBox:~/django-with-react-study#

7) DB 확인

  • .tables 조회시 blog1_post 가 존재
  • SELECT * FROM blog1_post; 시 아무것도 안나오는데
    이건 테이블을 날렸다가 다시 생성한거라서
    기존에 데이터는 테이블 날리면서 사라짐.
(venv) root@km-VirtualBox:~/django-with-react-study# sqlite3  db.sqlite3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
accounts_profile            django_admin_log
auth_group                  django_content_type
auth_group_permissions      django_migrations
auth_permission             django_session
auth_user                   instagram_comment
auth_user_groups            instagram_post
auth_user_user_permissions  instagram_post_tag_set
blog1_post                  instagram_tag
sqlite> 
sqlite> SELECT * FROM blog1_post;
sqlite>


참고

profile
자동화 개발

0개의 댓글