Djangoでデータベースを設定する方法とモデルの作成、モデルを使ったデータベース操作について学びましょう。これまではviews.pyに直接データを記述していましたが、アプリケーションで使用するデータはデータベースで管理するべきです。
目次
モデルとは
モデルとはDjangoからデータベースを操作するための機能で、多くのWebアプリケーションフレームワークで採用されている基本的な機能の1つです。
通常、データベースを操作するにはSQL言語を使いますが、モデルを使うとPythonのオブジェクトとしてデータベースのレコードを操作することができるため、Pythonのコードでデータベースを操作できるようになります。
このようにデータベースとクラスの構造を対応させ、レコードをモデルクラスのオブジェクトとして扱えるようにする仕組みをORマッパー(Object-Relational Mapper)と呼びます。
データベースの設定
Djangoはデフォルトの設定では SQLite を使用します。
SQLite は Python に標準で組み込まれているためそのまま使うことができますし、手元でDjangoを試してみる分には十分ですので、この講座でもこのままSQLiteを使ってすすめていきます。
ただし、本番環境で使う場合には MySQL や PostgreSQL といったよりスケーラブルなデータベースを使った方が良いでしょう。
データベースへの移行作業はとても大変ですので、どのデータベースシステムを使うかはこの時点で決めておくことをおすすめします。
他のデータベースを使いたい場合、適切な データベースのバインディング をインストールして、設定ファイル(mysite/settings.py)の DATABASES の ‘default’ 項目内のキーを、次のようにデータベースの接続設定に合うように変更する必要があります。
DATABASES = { # デフォルトの設定をコメントアウト # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } # 使用するデータベースの設定に合うようキーを設定 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'データベース名', 'USER': 'ユーザー名', 'PASSWORD': 'パスワード', 'HOST': 'ホストサーバーのアドレス', 'PORT': 'ポート番号' } }
モデルを定義
では、作成するデータベースの構造を持つモデルを定義しましょう。
今回は1行掲示板のための article というモデルクラスを定義して、そこに投稿内容を格納する content というカラムを定義します。
/bbs/models.pyを開き、次のように記述します。
from django.db import models class Article(models.Model): # contentカラムを定義 content = models.CharField(max_length=140) def __str__(self): return self.content
これで投稿内容を格納するデータベースのモデルを定義できました。
Djangoではこのようにモデルを作成しておくことで、マイグレーション機能でデータベースのテーブルを作成できます。
データベースのマイグレーション
Djangoにおけるマイグレーションとは、設定ファイルとモデルからデータベースを作成したり、定義を変更したりすることを指します。
※Webアプリケーション界隈でマイグレーションというとデータベースの移行作業を指すのが一般的ですので注意しましょう。
Djangoではマイグレーションを2段階に分けて行います。
- モデルの変更差分をチェックしてマイグレーションファイルを作成
- マイグレーションファイルの内容をデータベースに反映
こうすることでデータベースの中身をコマンド1つでまとめて変更したり、元に戻したりできるわけです。
実は、前回までの内容だとWebサーバーを起動した時に、「未適用のマイグレーションが18件ありますよー」という注意書きが表示されていました。
この注意書きはマイグレーションを行えば出なくなります。
実際にマイグレーションを行い、モデルからデータベースを作成してみましょう。
Windows PowerShell で次のコマンドを実行します。
py manage.py makemigrations bbs
これでモデルの変更差分が書かれたマイグレーションファイルを作成できました。
bbsのmigrationsディレクトリにマイグレーションファイルが作成されているのがわかります。
このファイルにデータベースの情報を変更するための内容が盛り込まれています。
ではデータベースに反映してみましょう。
py manage.py migrate
完了です。
改めてWebサーバーを起動してみましょう。
未適用のマイグレーションに関する注意書きがなくなっています。
これで bbs アプリケーションでデータベースを利用するための準備ができました。
今回はsqlite3を使っているので、データベースの場所は django-tutorial/db.sqlite3 です。