モデルとは何か
モデルは、アプリケーションが扱うデータに関する唯一かつ決定的な情報源です。モデルを使うことで、必要なデータフィールドとその動作を定義することができます。一般的に、各モデルは単一のデータベースのテーブルに対応付けられます。
モデルの基本
モデルの定義
- モデルは Python のクラスであり、django.db.models.Model のサブクラスとして定義されます。 - モデルの属性はそれぞれがデータベースのフィールドを表します。 - これらを使って、Djangoは自動生成されたデータベースアクセスAPIを提供します。
簡単な例
次の例では、`first_name`と`last_name`を持つ`Person`というモデルを定義しています。`first_name`と`last_name`がこのモデルのフィールドで、それぞれデータベースのカラムに対応づけられます。
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
このモデルは以下のようなデータベーステーブルを作成します:
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
Django は Python で書かれたWebフレームワークで、データベースとの連携が非常に簡単です。Djangoを使った場合、SQLの記述を自動的に生成してくれる機能があります。
モデルクラスからデータベースのスキーマを自動生成
開発者はモデルクラスを定義するだけで、Djangoがデータベースのスキーマを自動的に生成してくれます。例えば、以下のようなモデルクラスを作成すると:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
publication_date = models.DateField()
Djangoはこのモデルクラスからデータベースのテーブルを自動的に作成します。モデルクラスのフィールド定義から、適切なデータ型やカラム名などが自動的に設定されます。これにより、開発者はSQL文を直接書く必要がなくなり、開発の効率が大幅に向上します。
モデルの変更をデータベースに自動反映
また、Djangoでは migrate
コマンドを使うことで、モデルの変更をデータベースに反映させることができます。
python manage.py makemigrations
python manage.py migrate
モデルの変更点を自動で検出し、必要なSQLを生成してくれるので、スキーマ変更の手間も大幅に削減できます。
SQLの知識がなくてもWebアプリケーションを開発可能
このように、Djangoを使えば開発者はデータベースとの連携を意識する必要がなくなり、アプリケーションの開発に集中できます。SQLの知識がなくても、Djangoの便利な機能を活用してWebアプリケーションを作ることが可能です。ただ、稀ですが要件によってはSQLを直書きすることもあります。また、SQLの知識があった方が中で何をしているのかが理解できるため、SQLを知っているに越したことはありません。