본문 바로가기

Django

Django Inspectdb 기능

legacy DB를 장고 서버에서 사용해야 할 상황이 생겼다.

그런데, 장고에서는 DB에 접근하기 위해 모델을 사용하기 때문에 DB 테이블을 모델로 바꿔야 하는 작업이 필요하다.

하지만 장고에서 고맙게도 이런 기능을 지원해준다.

공식문서 링크 : docs.djangoproject.com/en/3.1/howto/legacy-databases/

 

Integrating Django with a legacy database | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

공식문서에 따르면 상황에 따라 파라미터를 다르게 주어 세부사항을 설정할 수 있다.

변환할 DB는 장고 프로젝트의 settings.py에 연결된 정보를 따른다.

$ python manage.py inspectdb > model.py 를 하게되면 변환한 모델 내역을 model.py에 저장할 수 있다.

 

공식문서의 예제에 덧붙여 설명하면

Legacy DB Table 구조

변환된 장고 모델은 다음과 같다.

class Person(models.Model):
    id = models.IntegerField(primary_key=True)
    first_name = models.CharField(max_length=70)
    class Meta:
       managed = False #장고에서 이 테이블과 관련된 Creation, Modification, Deletion을 상관하지 않음
       db_table = 'CENSUS_PERSONS' #DB 테이블의 이름

managed = False라는건 장고가 테이블을 관리하지 않는다는 의미이다.

 

그런데, mysql 등의 DBMS에서 지원되는 TINYINT 타입은 장고 모델에서 지원하지 않는 타입이기 때문에 엉뚱한 타입으로 변경될 수 있다고 한다. 이 때, 변경된 모델 속성 옆에는 ## This field type is a guess. 라고 붙음

 

공식문서에 따르면, 커스텀 모델 속성을 정의할 수 있다고 함

docs.djangoproject.com/en/3.1/howto/custom-model-fields/

'Django' 카테고리의 다른 글

장고 User 모델 커스텀하기  (0) 2020.12.18
Django Model _set 메서드에 관하여  (0) 2020.11.17