概要
- 既存でデータベースを運用していたが、新規で構築するDjangoアプリケーションからそのデータベースを参照したかった。
- DjangoのデフォルトDB以外も参照できる。
- Mysqlでしか試していないがPostgresも同様にできると思われる。
設定方法
DB情報を追記
- DATABASES が辞書形式になっているので追記する。
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': db,
'USER': user,
'PASSWORD': password,
'HOST': 'mysql01',
'PORT': '3306',
},
'otherdb': {
'ENGINE': 'django.db.backends.mysql',
'NAME': otherdb,
'USER': user,
'PASSWORD': password,
'HOST': 'mysql02'
'PORT': '3306',
}
}
モデルを設定
- 通常と同様にモデルを定義する。
- メタデータとして「db_table」に参照したいDB内のテーブル名をしてする。
- 指定しないと「<アプリケーション名>_<クラス名>」の形で表示された。(デバッグで確認)
application/models.py
from django.db import models
class <クラス名>(models.Model):
class Meta:
db_table = '<テーブル名>'
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length = 255)
ビューの設定
- 「db_manager」を利用してsettings.pyで追記したDBを指定することで外部DBを参照できる。
- TablesName
application/views.py
from django.shortcuts import render
from .models import <クラス名>
def index(request):
data = <クラス名>.objects.db_manager("<DB名>").all()
params = { 'data': data }
return render(request, 'sample.html', params)
マイグレーションも忘れない
$ python3 ./manage.py makemigrations
$ python3 ./manage.py migrate