Django 개발을 하던 중 추가로 데이터베이스를 연결하여 사용할 필요가 생겼다.
먼저 추가로 연결할 데이터베이스를 설치 후 실행해준 다음 아래의 과정을 진행하면 된다.
settings.py
에 DB Router와 추가로 연결할 DB를 설정# DB Router
DATABASE_ROUTERS = [
'core.dbrouter.MultiDBRouter',
]
DATABASES = {
# 기존 MySQL DB
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdjango',
'USER' : 'root',
'HOST' : 'localhost',
'PORT' : '3306'
},
# 추가로 연결할 MySQL DB
'referencedb1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB명',
'USER' : '계정 이름',
'PASSWORD' : '계정 비밀번호',
'HOST':'DB 주소',
'PORT':'포트 번호'
}
}
$ python3 manage.py makemigrations polls
$ python3 manage.py migrate
## referencedb1 DB와 migration
$ python3 manage.py makemigrations --database referencedb1
$ python3 manage.py migrate --database referencedb1
## referencedb1 DB의 model 생성
$ python3 manage.py inspectdb --database referencedb1
dbrouter.py
작성settings.py
에 작성했던 DB 이름 그대로 작성해주어야 함class MultiDBRouter(object):
def __init__(self):
self.model_list = ['default', 'redis-7-0-8']
def db_for_read(self, model, **hints):
if model._meta.app_label in self.model_list: return model._meta.app_label return None
def db_for_write(self, model, **hints):
return None
def allow_relation(self, obj1, obj2, **hints):
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return None
models.py
에 모델 작성 시 Meta
클래스에 app_label
을 추가로 작성from django.db import models
class db1_modelname1(models.Model):
...
class Meta:
managed = False
app_label = "default"
db_table = 'test1'
class db2_modelname1(models.Model):
...
class Meta:
managed = False
app_label = "referencedb1"
db_table = 'test2'