programming/python

[django] 테이블 삭제 후 재생성 안될 때

iiliiiili 2023. 4. 3. 17:16

울고 싶어도 꾹 참고 아래를 따라한다..

 

나의 잘못)

(1) models.py 로 수정 반영을 기대하였으나 반영 되지 않았다.

(2) db에 직접 들어가 문제가 있는 테이블을 지우고 재생성을 하고자 했다

#sqlite3 db.sqlite3

> drop table [test]

(3) models.py 에 재작성 하고 마이그레이션 하였으나 인식되지 않음..

 

 

 

1. migration 파일 삭제해 보기

- 일반적인 migration 파일의 경로 -> ~/[app]/migrations/0001_initial.py 

migration의 0001~ 0002~ 숫자로 시작하는 파일을 모두 지운다 (지워도 서비스 이상 없음)

# rm -rf  blog/migrations/00*

다시 마이그레이션 시도

# python manage.py makemigrations

# python manage.py migrate

 

2. fake migrate 해보기

앱 별로 migration 파일 확인

#python manage.py showmigrations

앱의 마이그레이션 파일을아래와 같이 명령하여 초기화한다.

# python manage.py migrate --fake [app이름] zero

 

3. 특정 테이블의 db만 생성하기

 django table already exists 발생할 때 (db에 직접 접근해서 테이블을 삭제한 경우)

# python manage.py makemigrations

로 생성된 migration 파일을 들어가서 생성할 테이블만 남기고 삭제

# python manage.py sqlmigrate blog 0001

 

 

사용하고 있던 테이블의 구조를 변경하는 올바른 방법은 무엇인가?

 -> 무조건 models.py 수정하고 alter 마이그레이션 적용하는 것이 정석..