【Django】Model(モデル)とは:models.pyの書き方とデータベース連携(テーブル作成)
2021.06.03 /
本記事では、PythonのWebフレームワークであるDjangoにおける、Model(モデル)によるデータベース連携(テーブル作成)について詳しく解説していきます。
Webアプリケーションを作成する上でデータベースは非常に重要な要素です。
Djangoでデータベースを操作するためには、モデルModelという仕組みを使用します。
ビューViewではviews.py、URLルーティングにはurls.py、モデルModelにはmodels.pyをそれぞれ使います。
ここではmodels.pyを使ったデータベース連携や、テーブル作成まで詳しく見ていきましょう。
本記事を通して以下の知識を学べます。
- DjangoのMTVフレームワークについて
- モデルModelについて
- モデルの定義方法
- モデルをデータベースに反映する方法
Django
Djangoとは
Djangoとは、Pythonによるフレームワークの1つです。
Webアプリケーション開発に適したフレームワークであり、様々な機能を有しています。
Pythonのフレームワークの中では、最も人気・知名度が高いです。
作成したいWebアプリケーションが小規模でも大規模でも、どんなシステムにも対応できます。
Djangoを使うことで1からWebアプリケーションを作成するよりも、大幅に時間を節約することができます。
Djangoのような開発に必要な機能が揃っているフレームワークをフルスタックフレームワークと呼ばれます。
総じて次のメリットがあると言えます。
- 開発のスピードの向上・効率化
- コーディング量の削減によるミスやエラーの現象
MTVフレームワーク
DjangoはMTV(モデル・テンプレート・ビュー)という設計手法が使われています。
MはModel(モデル)、TはTemplate(テンプレート)、VはView(ビュー)を表します。
それぞれ次の機能を有します。
- Model(モデル):データベースとの連携を行う。該当ファイルはmodels.py
- Template(テンプレート):フロントエンド(HTML)を扱う。該当ファイルはtemplatesフォルダ内のhtmlファイル
- View(ビュー):バックエンドを扱う。該当ファイルはviews.py
その他にルーティングに関しては、URLs(urls.py)を使用しています。
MTVの関係は次図のようになります。
本記事では、MTVのM(モデル)、データベースと連携を行う仕組みについて詳しく解説しています。
モデルの該当ファイルであるmodels.pyの書き方から、データベースに反映する方法まで見ていきましょう。
モデルModel
モデルModelとは
モデルとは、Webアプリケーションとデータベースを連携させる仕組みのことです。
モデルはデータベースに格納されているデータにアクセスすることができます。
Djangoではモデルを使うことで、非常に簡単にデータベースからデータの検索・取得・追加・削除といった一連のデータベース操作を行うことができます。
モデルは次のような特徴とルールを持っています。
- 各アプリケーション内のmodels.pyを使用する
- 1つのモデルが1つの(データベース内の)テーブルと対応する
- Pythonのクラスであり、django.db.models.Modelのサブクラス
- モデル名は大文字で始める
- idフィールドは自動的に追加される(Primary keyを定義しない場合)
- フィールドのオプションで何も指定しなければNOT NULL制約がかかる
モデルを定義してデータベースに反映するまでの流れは次のようになります。
- アプリケーションフォルダ内のmodels.pyにモデルを定義
- マイグレーションファイルを生成(manage.py makemigrationsの実行)
- マイグレーションファイルからSQLを発行してテーブルを生成(manage.py migrateの実行)
次にmodels.pyに実際にモデルを定義する方法について見ていきましょう。
モデルの定義(作成)
models.pyにモデルを定義(モデルの作成)するには、モデル定義を記入する前にdjango.db.modelsをインポートします。
From django.db import models
次に以下のようにモデルの定義を記入していきます。
class Device(models.Model):
name = models.CharField(max_length=255)
place = models.CharField(max_length=100)
type = models.CharField(max_length=100)
Djangoにおいてモデルはdjango.db.models.Modelを継承して定義します。
ここではモデル名がDeviceであり、nameとip_address、typeという3つのフィールドを持ったモデルを定義しました。
モデル作成のルールに基づき、モデル名は大文字で始めます。
モデルはクラスとして定義し、django.db.models.Modelのサブクラスとして動きます。
class Device(models.Model):
モデル内の3つのフィールドはすべてCharFieldという型を設定しています。
CharFieldは文字列を保存するためのフィールドの型です。
フィールドには様々な型(フィールドタイプ)とフィールドオプションが存在します。
フィールドについて詳しくは以下記事をご参照ください。
【django】モデルのフィールドについて:フィールドの型・オプション一覧
上記のDeviceモデルは、次のようなSQLを発行してデータベースにテーブルを追加します。(ここではアプリケーション名をmyappとする)
CREATE TABLE myapp_device(
“id” serial NOT NULL PRIMARY KEY,
“name” varchar(255) NOT NULL,
“place” varchar(100) NOT NULL,
“type” varchar(100) NOT NULL
);
つまりデータベースに登録されるテーブル名がアプリケーション名+モデル名となり、各フィールドがカラムに関連付けられるということです。
カラムとは、データベースにおける「列」に相当する属性を指します
Deviceモデルで作成されたmyapp_deviceテーブルを図にすると次のようになります。
図でモデルとデータベースの関係を覚えるとわかりやすいと思います。
モデルのルールで記載しているように、idフィールド(プライマリーキー)は自動的に追加されるため、モデル定義で記入する必要はないです。
またフィールドのオプションで何も設定していないため、各フィールドにNOT NULL制約がかかっています。
このようにモデルを定義し、そのデータのフィールドとそれらの動作を指定して、データベースへテーブルの追加を行います。
モデルの作成からデータベースへの追加までの流れ
models.pyからデータベースにテーブルを作成するまでの一連の流れを以下に記します。
- model.py内にモデル定義を記入する
- マイグレーションファイルの生成
- マイグレーションファイルの確認
- python mage.py migrateの実行
- データベースに反映されたかを確認する
model内にモデル定義(クラス定義)を記入する
上述「モデルの定義(作成)」で記したように、アプリケーション内のmodels.pyを編集し、モデルを記入します。
データベースに追加したいテーブルをクラスで定義して、その中にカラムとなるフィールドを1つ以上設定します。
マイグレーションファイルの生成
models.pyの編集が終わりましたら、次にマイグレーションファイルを生成します。
マイグレーションファイルは、Djangoデータベースにmodelの設定変更を知らせるために使います。
またマイグレーションファイル生成前に、念のためsettings.pyのINSTALLED_APPSに該当アプリケーションが追加されているか確認しましょう。
追加されてなければ、必ずアプリケーション名を追加してください。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
#...
'office54.apps.Office54Config', # 追加
#...
]
追加した1行は、office54というアプリケーションフォルダに保存されている、apps.py内のOffice54Configを読み込んでください、という意味です。
マイグレーションファイルを生成するために次のコマンドを実行します。
python manage.py makemigrations
上記コマンドにより、アプリケーションフォルダ内にmigrationsフォルダが作成されます。そしてその中に0001から連番で番号が振られたスクリプトが作成されます。
マイグレーションファイルの確認
「マイグレーションファイルの生成」で作成されたマイグレーションファイルを念のため確認しましょう。
ご自身が想像しているデータベース構造になっているか最終チェックをしてください。
データベースへ反映させる
作成したマイグレーションファイルに問題なければ、次のコマンドを実行してデータベースへ反映させます。
Python manage.py migrate
このコマンドを実行することにより、マイグレーションファイルで記入された変更がデータベースに反映されます。
データベースに反映されたかを確認する
データベースクライアント等で適用結果を確認しましょう。
このような流れでmodels.pyにモデルを定義して、データベースに反映させていきます。
この流れさえわかれば、簡単にデータベースへテーブルの追加ができるということがわかると思います。
まとめ
本記事「【Django】Model(モデル)とは:models.pyの書き方とデータベース連携(テーブル作成)」はいかがでしたか。
データベースの操作(今回で言えばテーブルの追加)が簡単にできるのは、Webフレームワークならではですね。
モデルを通してデータベースの操作ができるようになると、Webアプリケーションの幅が格段に広がります。
ぜひモデルを使いこなして、Webアプリケーション開発を進めてください。