Django で利用する SQL データベースの管理
以前の投稿で、Django は標準でアプリの管理機能をサポートしているという事を紹介しました。この記事では、もう少し詳しく管理機能について紹介しています。
データベースの管理や参照
バックエンドを含めた Web サービスや Web アプリを開発する場合、データベースを利用するケースは多いと思います。Firebase を利用する場合は、Firebase コンソールを使うとデータベースの状態を簡単に参照できるので便利です。
Django の場合は、SQL データベースを利用します。PHP で SQL のデータベースを管理する場合は、「phpmyadmin」が有名です。特に WordPress を利用する場合、データベースを直接管理する場合には便利なアプリです。phpmyadimin 自体は SQL データベースの管理なので、Django を利用する場合でも利用は可能ですが、別に Web サーバーを動かす必要もありますし、既に設定をされていない場合にはちょっと不便です。
Django が標準でサポートしているデータベースは「SQLite」になります。このデータベースを利用する場合は、既に紹介している「SQLiteBrowser」を使えば必要な機能は揃っています。
あとは、SQL データベースが提供するコマンドラインベースのアクセスを利用すれば、大抵のデータベースは直接アクセスが可能です。しかし、コマンドラインなので、慣れないと使いづらいのと、毎回コマンドをタイプしないといけないので面倒です。
Django の管理アプリ
Django は、フレームワークの一部として、管理機能も備えています。以前の記事では、管理用のユーザーを作成して管理用のアプリにログインして管理画面を見るところまでを紹介しました。
標準の画面では、ユーザーやグループの管理をする機能のみになっていますが、Django で利用する SQL データベースの管理をすることも簡単な設定で可能です。
データベースのテーブルは、先日の投稿で紹介した通り Django のアプリのフォルダの「models.py」でクラスを作成する形で必要な構造(フィールド)を定義すれば Django が自動的に作ってくれます。
管理用のアプリで作成したテーブルを管理したい場合には、同じアプリのフォルダの「admin.py」に作成したクラスを登録するだけです。登録すると、管理アプリにログインすると、登録したテーブルの一覧が表示されるようになります。
「admin.py」の例です。「app」という名前のアプリのテーブルとして「Sample」というクラス(テーブル)を登録する例です。
from django.contrib import admin
from app.models import Sample
admin.site.register(Sample)
管理画面に登録すると、テーブルのデータの一覧や、データの更新、削除、新規のデータの追加ができるようになります。
Django の管理アプリでできること?
Django の管理アプリでできることは何か?基本的には、Django のアプリで利用するテーブルの管理は一通りの事ができますし、管理する内容はカスタマイズ可能です。アプリのグループやユーザの管理もできます。これは、標準の機能として、Django がデータベース上にアプリを管理する為に必要なユーザーやグループの情報を作るようにしているものです。
このほかにも、Django 自体がフレームワークの機能の一部として、データベースを利用しています。データベースの中身を見ると開発者が作成したテーブル以外にもたくさんのテーブルが作られているのがわかります。
従って、Django で標準のデータベースとして設定されている「SQLite」を利用する場合、ほぼ全ての管理はこの管理アプリで可能です。合わせて「SQLiteBrowser」を利用すればほぼ必要な機能はカバーされます。
ところが、「SQLite」以外の SQL データベースを利用する場合は、実は全てというわけではありません。「MySQL」や「PostgreSQL」などを利用する場合は、データベース側の初期設定は別途行う必要があります。
* データベースそのもののインストールと設定
* Django のアプリで利用するデータベースの作成
* Django のアプリで利用するデータベースにアクセスするためのユーザーの設定
これは、別途データベース側で予め準備をして、Django のプロジェクトに登録する必要があります。この部分が設定されないと、Django からデータベースにアクセスする方法がわからない(ユーザ情報やデータベースの名前)ので Django の管理機能を使うことができません。
データベースの設定は、Django のプロジェクトフォルダにある「settings.py」で行います。 標準設定では以下のようになっていて、「SQLite」が指定されています。
DATABASE = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3'
}
}
MySQL を利用する場合は以下のように書き換えます。
DATABASES = {
'Default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'USER': 'admin',
'PASSWORD': 'password',
'HOST':'localhost',
'PORT':'xxxx',
'OPTIONS': {
}
}
}
省略できる項目もありますが、基本的に、データベース名、データベースアクセスのユーザー名、パスワードなどは必須です。Django をホスティングするサーバー以外にデータベースがある場合は、ドメイン名や IP アドレスなどが必要です。
この設定を有効にすると、データベースに Django からデータベースにアクセスできるようになります。
Django の開発では SQLite が便利!
SQLite 以外の SQL データベースを Django で利用する場合には、SQL データベース自体を別途インストールして、データベースの設定を予め行う必要があります。データベース側の初期設定が済んでいれば、Django の管理機能を使えばテーブルの管理は簡単にできます。
しかし、データベース側の設定が必要な事と開発用の環境と実際にインターネットに公開する場合(デプロイ)の環境は違うのば普通です。そう考えると開発は、SQLite で行って、デプロイする際にデータベースを入れ替える方法が便利です。
当然、公開前に実際に利用するデータベースの設定とデータの準備が必要な場合はデータの事前準備が必要になりますが、開発の効率を考えると、SQLite で基本機能を作ってしまった方が便利です。実際のデータベースのアクセスは Django の Python コードからは直接は見えないので、利用するデータベースを入れ替えれば Python のコードは、通常は影響しません。SQLite ならば SQLiteBrowser も利用できるので開発は効率的に進められます。
まとめ
Django のフレームワークには管理機能が標準で含まれていて、設定した SQL データベースのテーブル管理のための機能を簡単に設定できます。しかし、データベース側の初期設定は予め行う必要があります。通常は作成した Web サービスや Web アプリを公開する場合、利用するデータベースは置き換えるのが普通です。
従って、開発事は、SQLite を利用するのは意外に便利です。SQLite の場合は、データベースの初期設定は不要ですし、SQLiteBrowser などの利用もできて、データベース周りの動作確認は効率的にできます。
開発事は、特に SQLite で問題がある場合を除けば、SQLite を利用する方がスムーズです。ある程度機能確認が進んだ状態で、外部の SQL データベースの設定を行う方が開発全体を見た場合には有利です!