4
9

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で既存のPostgreSQLを利用

Posted at

はじめに

Djangoチュートリアル③(モデルの作成、Django Admin)ではデフォルトの SQLite データベースの設定を行った。本記事では、PostgreSQL の設定を試してみる。あらかじめ存在している AWS 上に構築されている PostgreSQL を利用するため、①データベースの設定、②データベースからモデルを定義、③マイグレーションまで行う。Integrating Django with a legacy database を参考にした。

①データベースの設定

まず config/settings.py におけるデフォルト設定(SQLite)を以下に示す。SQLite の 'NAME' は使用するファイルの絶対パスを指定している。

config/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

上記を以下のように変更する。

config/settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': [database_name],
        'USER': [user_name],
        'PASSWORD': [password],
        'HOST': ***.amazonaws.com,
        'PORT': '5432'
    }
}

SQLite では 'ENGINE' として 'django.db.backends.sqlite3' としていたのを、'django.db.backends.postgresql' に変更しており、あとは DB の設定で必要とされるものを順に指定している。

さらに以下コマンドで PostgreSQL のドライバとして paycopg2-binary をインストールする。

$ pip install psycopg2-binary

上記で行ってきたデータベースの設定で正しく接続できているかは以下コマンドで確認できる。

$ python manage.py dbshell

②データベースからモデルを定義

既存のデータベースを使用しているため、当然モデルの定義がされておらず、Django ORM を使用することができない。Django ではデータベースからモデルを自動生成する inspectdb コマンドが準備されているので、それを利用してモデルを定義する。以下コマンドでは、出力結果をそのまま [app_name]/models.py に保存している。

$ python manage.py inspectdb > [app_name]/models.py

各モデルクラス内のサブクラスである class Meta の項目が意味するものは以下。

  • managed:各テーブルの作成、変更、および削除を管理するかどうか。デフォルトでは False。
  • db_table:テーブル名。

モデルを定義できたので、有効化するために config/settings.py の INSTALLED_APPS に登録しておく。登録する方法はDjangoチュートリアル③(モデルの作成、Django Admin)のモデルの有効化と同様。

③マイグレーション

以下コマンドでマイグレーションを行う。

$ python manage.py makemigrations [app_name]
$ python manage.py migrate

テーブルのアクセスは以下コマンドなどで確認できる。

$ python manage.py shell
>>> from [app_name].models import [model_name]
>>> [model_name].objects.all()

おわりに

既存のデータベースからモデルを自動作成でき、非常に便利なことがわかった。新規データベースでも、モデルを定義するよりデータベースを先に作ってそれからモデルの自動作成をした方が楽なのかも。わかったことがあれば、追記していきたい。

4
9
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
4
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?