본문 바로가기
AI 이론과 개발의 혼재/Python

Django. 기존DB 재사용! Django로 Migration하기

by ministar 2018. 8. 8.


기존 DB - Django로 Migration하기




▼ MariaDB - Python - Django 관련 링크 

2018/08/03 - [AI 이론과 개발의 혼재/Python] - Django - MariaDB 연동하기 (Windows)

2018/08/08 - [AI 이론과 개발의 혼재/Python] - MariaDB 외부에서 접속/접근 방법

2018/08/03 - [AI 이론과 개발의 혼재/Python] - Python. MySQL 기본 사용법(CRUD)




Django에서는 model.py에 DB 객체를 선언하여 테이블을 생성해주는데,

만약 기존 DB가 있을 경우에는 Django랑 연동을 못할까? 


"가능하다"


기존 DB를 장고로 migration하는 방법에 대해서 알아보자.



1. migration할 대상 DB 정보 설정

Migration할 대상에 대한 DB정보를 setting.py에 적어준다. (지난번 포스팅에서 설정해줬지롱~ )


 setting.py 

DATABASES = {
    'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'secupy',
        'USER': 'root',
        'PASSWORD': '1234',
        'HOST': 'localhost',
        'PORT':  '3306'
    }
}



2. 기존 DB migration 수행 - model.py 생성

inspectdb > '저장 하고자하는 위치' /models.py

필자는 저장하고자하는 위치를 application 이름으로 설정해서 했다. 

$ python manage.py inspectdb > secupy_test/models.py


수행하고나면, 해당 폴더 밑에 model.py에 기존 DB에 있던 model object가 모두~ 자동으로 생성되어 있음을 확인 할 수 있다.

예) secupy_test/model.py 

class Users(models.Model):
    user_id = models.CharField(db_column='USER_ID', primary_key=True, max_length=50)  # Field name made lowercase.
    user_nm = models.CharField(db_column='USER_NM', max_length=200)  # Field name made lowercase.
    tel_no = models.CharField(db_column='TEL_NO', max_length=50, blank=True, null=True)  # Field name made lowercase.
    email = models.CharField(db_column='EMAIL', max_length=100, blank=True, null=True)  # Field name made lowercase.
    compny_nm = models.CharField(db_column='COMPNY_NM', max_length=200, blank=True, null=True)  # Field name made lowercase.
    dept_nm = models.CharField(db_column='DEPT_NM', max_length=200, blank=True, null=True)  # Field name made lowercase.
    jdeg_nm = models.CharField(db_column='JDEG_NM', max_length=200, blank=True, null=True)  # Field name made lowercase.
    working_site_nm = models.CharField(db_column='WORKING_SITE_NM', max_length=200, blank=True, null=True)  # Field name made lowercase.
    reg_tm = models.DateTimeField(db_column='REG_TM')  # Field name made lowercase.
    chg_tm = models.DateTimeField(db_column='CHG_TM')  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'users'



자동으로 model을 생성해주니~ 매우 기분이 좋은 것 :> 




3. Django DB migration 수행


  • Setting.py에 app 명 추가 
위에 정의한 Model과 DB를 연동하기위한 Model 생성하기 위한 준비작업으로 아래와 같이 app명을 추가해준다.
-- 아래에선 'secupy_test'라는 app 명이 추가됨을 볼 수 있다. --

 setting.py 

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'secupy_test',
]

  • makemigration 수행 > migration 수행 
$ python manage.py makemigrations
$ python manage.py migrate

Django에 Model 생성 완료 :) 


댓글