TIL#149 Django inspectdb

Dasom·2021년 7월 15일
2

Django

목록 보기
27/33

django로 프로젝트를 진행할 때 외부 db를 가져와서 작업을 해야 하는 경우가 있다. 일일히 models.py 에 작성해야 하는데 만약 외부 db 테이블이 백개라면 너무 번거로운 일이 된다. 이럴 때 사용하는게 장고의 inspectdb 기능이다. settings.py 에 연결할 외부 db만 명시해주면 python manage.py inspectdb 명령어를 통해 외부 db를 models.py로 가져올 수 있다.

# settins.py

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

이부분에 연결할 외부 db 정보를 입력하면 된다.
만약 현재 db가 있고 추가적으로 외부 db를 연결하고 싶다면 아래처럼
default 외에 추가로 작성하면 된다.

# settings.py

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
    'external': {
        'ENGINE': '',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': ''
    }
}

external 은 예시이고 원하는 대로 지으면 된다.

settings.py 에 db 정보 작성을 하고 나면 inspectdb 를 사용하여 외부 디비를 가져오면 된다.

  • 외부 db만 사용하는 경우

$ python manage.py inspectdb > apps/models.py(저장을 원하는 models.py 위치)

  • 외부 db를 추가로 사용하는 경우

$ python manage.py inspectdb > apps/models.py(저장을 원하는 models.py 위치) --database external

이렇게 하면 원하는 위치에 외부 db 테이블들이 불러와진다.

❗️ 주의할 점

  • 외부 테이블의 Primary Key 를 제대로 못 가져오는 경우가 있다. 그런 경우에는 생성된 모델의 필드에 primary_key=True 를 추가해주면 된다.
  • 불러온 외부 테이블 구조를 변경하고 싶다면 Meta 클래스의 managed=Falsemanaged=True 로 변경해주면 된다.
  • 몇몇 부분들은 수작업으로 수정해주어야 한다.
profile
개발자꿈나무🌲

2개의 댓글

comment-user-thumbnail
2021년 7월 16일

좋은 정보 감사합니다

답글 달기
comment-user-thumbnail
2023년 4월 24일

감사합니다.

답글 달기