본문 바로가기
Pre/장고(Django)

장고(Django) :: dumpdata와 loaddata를 활용해서 데이터 옮기기

by 튼튼이한국 2018. 11. 29.
반응형

서론.

장고(Django)를 통해 DB를 쓰다보면 여러가지 데이터를 옮겨야 하는 상황이 발생되기 마련이다.


예)

1. 기존 테스트로 sql-lite로 개발을 하다가 런칭 시에 MySQL로 전환

2. 로컬 MySQL에서 초기 세팅후 AWS RDS의 MySQL로 데이터 이전

3. 버전2 개발을 위해 버전1의 데이터를 버전2로 옮기는 마이그레이션

4. 혹시 모를 사태를 대비해 어제 백업해둔 데이터를 지금 DB로 이전


요약.

위와 같은 기존의 데이터를 옮기는 작업을 할때 간편하게 이용하는 방법이 바로,

장고(Django)의 manage.py에서 제공하는 dumpdata, loaddata 명령어이다.


dumpdata로 원하는 데이터만 쏙 뽑아서

loaddata로 새로운 DB로 이전 할 수있다.


내용.

사실 장고에서 워낙 잘만들어 놓았기 때문에 알뜰하게 사용법만 익히면 아주 쉽다.



- 기본 명령어


python manage.py dumpdata > xxx.json



이렇게 명령어를 치면 내 장고가 사용하고 있는 모든 DB의 데이터를 json형식으로 저장을 알아서 해준다.



- 특정 앱의 데이터만 덤프할때


python manage.py dumpdata appname > xxx.json



dumpdata 뒤에 파라미터로 앱이름을 적어주면 해당 앱의 내용만 데이터 덤프가 된다.



- 특정 데이터만 빼고 덤프할때


python manage.py dumpdata --exclude appname > xxx.json



dumpdata 뒤에 파라미터로 제외할 앱이름을 적어주면 된다.


P.S 장고 DB를 보통 통으로 옮길 때 내가 사용하는 명령어이다.

python3 manage.py dumpdata --exclude auth.permission --exclude authtoken --exclude contenttypes > 2018-11-29.json



그럼 우리에겐 데이터를 덤프뜬 json파일이 있으니, 이걸 내가 원하는 장고 서버에 올려야 한다.



- 기본 명령어


python manage.py loaddata xxx.json



기존에 내가 덤프뜬 JSON 파일을 알아서 내 장고 DB에 넣어준다.


장고의 loaddata에도 exclude와 같은 기능이 있지만 


간편하게 dump를 뜰때 이쁘게 떠서 바로 로드하는 것이 더 편하다.



주의

각기 다른 데이터모델일 경우나,
auth.permission, authtoken의 경우 충돌이 나게 되면 머리가 많이 아파질수있다.
옮길때 마이그레이션 사항을 체크를 하고
특히 통으로 옮길때는 제약사항이 없다면 위의 나의 명령어처럼 걸리적거리는 것을 제거하고 옮기는 것을 추천한다.


※ 레퍼런스

장고 공식 레퍼런스 : https://docs.djangoproject.com/en/2.1/ref/django-admin/

반응형