7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Djangoで外部の既存データベースを参照する

Last updated at Posted at 2020-11-23

概要

  • 既存でデータベースを運用していたが、新規で構築する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
7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?