[Django] 최종 프로젝트 : 지금은 전시상황!(11) - [BE]DB의 어떤 테이블에 필드가 추가됐다
목차
일단 이 상태에서 loaddata 명령어를 쓰는 건 안 된다
중복되는 데이터가 있든 말든 기존 데이터에 추가되기 때문...
어차피 기존 데이터에는 추가된 필드에 내용이 없는데 괜찮겠냐 라는 메시지가 나온다
2가지 방법이 있다
<사전 준비>
makemigrations 할 때 방해가 되는 것이 있다
데이터베이스의 데이터를 불러오는 부분이다
우리의 recommend_ml.py 파일에는 데이터베이스에서 데이터를 불러오는 부분이 있어서 makemigrations가 안 된다
관련 부분을 다 주석 처리 해야 한다
변경사항이 하나도 없는 상태에서 하자 다 끝나면 git stash로 주석 처리한 거 한 번에 돌려놓을 거니까
- exhibitions/recommend_ml.py
ctrl + a 해서 전체 선택 후 ctrl + / 로 주석 처리한다
- exhibitions/views.py
import 부분인 19번째 줄, 실제 함수를 사용하는 부분인 73번째 줄을 주석 처리 한다
<첫 번째 방법 : 데이터베이스 날리기>
지금 기본 데이터베이스를 쓰고 있는데 postgresql에서 기본 데이터베이스는 날릴 수 없는 것 같다
추후에 또 이런 일이 발생할 수 있으니 그냥 삭제 가능한 데이터베이스를 하나 더 만들었다
- vscode에서 데이터베이스 생성하기(선택사항)
이 순서대로 데이터베이스를 새로 만들고 .env 파일에서 데이터베이스명 부분을 바꾼 데이터베이스로 변경해준다
- 기존 데이터베이스의 테이블 전부 삭제하기
현재 DB가 기본 DB가 아닌 삭제 가능한 데이터베이스여도 열려 있으면 삭제가 안 돼서 해당 데이터베이스를 닫고 다른 데이터베이스에서 아래 명령어를 쓰는 것보다는 그냥 테이블 다 선택해서 날려주는 게 편하다
drop database 데이터베이스명
이렇게 테이블을 모두 선택한다(첫 번째 테이블 클릭 후 shift 누른 상태로 맨 아래 테이블을 선택하면 다 선택됨)
마우스 우클릭 해서 drop을 누른다
yes 버튼 누른다
3~4 테이블 정도 남는데 같은 방법으로 drop 해주면 된다
이제 기존 데이터베이스는 볼 일이 없으니 select show database를 눌러 새로운 데이터베이스만 체크해준다
- migrate
모델이 바뀐 게 아니라면 makemigrations를 했을 땐 No changes detected라고 뜰 거다
python manage.py migrate
데이터베이스에 테이블이 생성됐는지 확인한다
- createsuperuser
모든 테이블을 삭제해서 superuser를 다시 생성해야 한다
python manage.py createsuperuser
- 필드 최대 길이 늘리기
테이블이 새로 생성되었으니 필드 길이도 다시 조정해야 한다
ALTER TABLE exhibitions_exhibition ALTER COLUMN content TYPE VARCHAR (30000);
ALTER TABLE exhibitions_exhibition ALTER COLUMN image TYPE VARCHAR (200);
ALTER TABLE exhibitions_exhibition ALTER COLUMN direct_url TYPE VARCHAR (200);
DROP Table exhibitions_exhibition CASCADE;
DROP Table exhibitions_exhibition_likes CASCADE;
DROP Table accompanies_accompany CASCADE;
DROP Table accompanies_apply CASCADE;
DROP Table reviews_review CASCADE;
차례대로 Execute를 누른다
CASCADE를 안 붙이면 관계된 테이블이 있어서 삭제가 안 된다고 뜬다
exhibitions_exhibition 테이블만 삭제하면 나중에 migrate 할 때 에러 뜬다
위 테이블과 관계 있는 모든 테이블을 같이 지워줘야 한다,,
- django_migrations
테이블 중 위 이름을 가진 테이블이 있다
여기서 app에 exhibitions, acommpanies, reviews는 다 지운다
나는 방금 migrate 해서 하나밖에 없는데 같은 app에 여러 name 행들이 있을 수 있다
찾아서 다 선택해서 삭제 버튼을 누른다
이 다음부터는 데이터베이스 아예 날릴 때랑 똑같다 createsuperuser는 할 필요없다(user 테이블 삭제 안 했으니까)
- migrate
python manage.py migrate
- 필드 최대 길이 늘리기
ALTER TABLE exhibitions_exhibition ALTER COLUMN content TYPE VARCHAR (30000);
ALTER TABLE exhibitions_exhibition ALTER COLUMN image TYPE VARCHAR (200);
ALTER TABLE exhibitions_exhibition ALTER COLUMN direct_url TYPE VARCHAR (200);