ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] 이미 서비스 되고 있는 DB 연동
    Programing/Python 2019. 11. 18. 21:24

    프로젝트를 진행하다 보면, 항상 신규프로젝트만 하는 경우는 적다.

    이미 진행되고 있는 서비스를 다른 기술 스택으로 이전을 하거나 혹은 신규 프로젝트여도 중간에 스택변경으로 인해서 DB연동을 옮길때가 있다.

    일반적으로는 각 언어와 프레임워크에 맞게 드라이버 및 몇가지 설정 후 일이 진행 되게 된다.

    하지만 Django로의 이전을 할 시에, Django의 강력한 ORM을 사용하려면 필수적으로 Model을 선언해 주어야한다.

    (물론 ORM을 사용 안할 시에는 그냥 커넥션 맺으면되긴함)

     

     

    방법은 사실 간단하다.

     

    1. Django 프로젝트에서 inspectdb를 이용하면 저절로 이미 생성되어있는 DB가 models.py파일로 떨궈진다.

    python manage.py inspectdb > models.py

    명령어를 보면 알겠지만 가장 뒤에 models.py라는 파일로 떨궈준다.

    필자는 모든 모델이 하나의 파일에서 관리하는게 꼴보기 싫어서 legacy_models.py 라고 떨군 후에 각 App에 맞게 정리를 한다. (필드별로 옵션들을 잘 수정해야 한다.)

    하지만 이렇게 떨구고 사용을 하면 추 후 모델변경으로 인한 마이그레이트를 할때 억압이 올것이다.

    왜냐하면 기본적으로 떨궛을때 managed=False 로 셋팅이 되어있기 때문이다.

     

    2. 따라서 managed=False를 모두 True로 변경해준다.

    그 후 마이그레이트는 필요가 없다. (이미 테이블은 존재하니까) 그럼 마이그레이션 관리는 어떻게하지?

     

    3. 그래서 이미 존재하는것들은 마이그레이트가 됐다고 거짓부렁을 날리면된다.

    python manage.py migrate --fake-initial

    끝이다.

    이 후에는 모델이 변경되거나 추가되거나 할때는 models.py에 작성한 후 항상 그랬듯이 makemigrations와 migrate를 하면 되겠다.

     

    정리하자면

    1. python manage.py inspectdb

    2. 해당 모델 managed = False -> managed = True 로 변경

    3. python manage.py migrate --fake-initial

    4. 그 후 모델 변경 시 평소처럼 makemigrations, migrate

     

    끝!

    댓글

Designed by Tistory.