본문 바로가기
Programming/Python & Django

[Django] DB 옮길 때 shell 사용해 옮기는 꼼수

by mingule 2020. 2. 14.

# 문제 

최근 페이지를 만들면서 친구에게 코드 리뷰를 받았다.

Model에 코드가 중복되어 있어 좋은 코드가 아니라고 해서, 기존의 모델을 한 개로 합치기로 했다.

실리콘밸리 레터와 미라클 레터라는 모델 두개를 "Letter"라는 모델 하나로 만들어 넣는데, 

내가 저장해 놓은 데이터들을 어떻게 옮기느냐의 문제가 생겼다.

하나 하나 옮기려면 시간이 너무 많이 걸릴 것으로 생각되어 python의 Shell을 이용해 옮기기로 했다.

 

# 해결 

1. 터미널에 아래를 입력해 shell을 켠다.

python3 manage.py shell

2. 우리가 사용할 django와 모델을 import 해준다.

import django
from letter.models import LetterML

3. 쿼리셋에 Letter의 object들을 담고, qs에 LetterML.objects.all()이 잘 들어왔는지 확인한다.

qs = LetterML.objects.all()
qs

4. for문을 이용해 qs 안의 object들을 한 개씩 가져오면서 우리가 원하는 모델에 담는다.
    이 때, indent를 잘 해주어야 하며, 만약 admin에 반영이 잘 되지 않는다면 enter 키를 몇번 눌러 보는 것을 추천한다.

for q in qs :
	Letter(title = q.title, content = q.content, ... ).save()

5. django admin에 로그인 해, Letter 모델에 잘 반영이 되었는지 확인한다.

6. 확인이 되었고 qs을 지우고 싶다면, 아래 코드를 입력한다.

qs.delete()

7. Ctrl+D를 하면 Shell에서 빠져나올 수 있다.

 

모델 업데이트 성공! ! !

댓글