Web開発の世界では、データの管理と操作が非常に重要な役割を果たします。PythonのWebフレームワークであるDjangoは、このデータ管理を効率的に行うための強力なツールをモデル(models.py)として提供しています。
参考 Djangoとは?
Djangoのモデルは、データベースの構造を定義するためのPythonのクラスで、テーブルのカラムやリレーションを定義します。これにより、データベースとのやり取りが容易になり、データの整合性を保つことが可能となります。
このページでは、Djangoのモデルについて、その基本的な概念から具体的な使用方法まで、初心者向けにわかりやすく解説します。5つのステップを通じて、Djangoのモデルを理解し、効果的に使用する方法を学んでいきましょう。
Pythonエンジニア/Djangoを利用したWeb開発者を目指す方であれば知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。
ステップ1:Djangoモデル(models.py)の基本
Djangoのモデル(models.py)は、アプリケーションのデータを構造化し、Pythonのクラスとして定義します。これにより、データベースとのやり取りが容易になり、データの整合性を保つことが可能になります。
と説明されても、なかなかピンと来ない方も多いはずなので、この章では実際のサンプルコードを見つつ、Djangoモデルの基本的な要素とその役割について深めていきましょう。
モデルの定義(models.py の定義)
Djangoモデルは、Pythonのクラスとして定義。このクラスはdjango.db.models.Model
を継承します。モデルクラスの各フィールドは、モデルフィールドクラスのインスタンスとして定義され、これがデータベースの各項目を表します。
例えば、ブログ投稿を表すモデルを作成する場合、以下のように定義することができます。
from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField('date published')
参考 import文
モデルクラスの名前は、通常表現したいオブジェクトを表す名詞の単数形を使用。例えば、ブログ投稿を表すモデルを作成する場合、BlogPost
という名前を使用します。
モデルクラス内のフィールドは、データベースの各列(カラム)を表します。フィールドの名前はPythonの変数として有効なものであれば何でも構いません。フィールドの型は、そのフィールドがどのようなデータを保存するかをDjangoに伝えます。
フィールド(項目)の種類
Djangoは多くの種類のフィールドを提供しています。これにより、様々な種類のデータをデータベースに保存することができます。以下に、いくつかの主要なフィールドを示します。
フィールドタイプ | 用途 |
---|---|
CharField | 短い文字列 max_length(最大長を指定する必要があります) |
TextField | 長い文字列 |
DateTimeField | 日付と時間 |
IntegerField | 整数 |
BooleanField | 真偽値(True/False) |
FloatField | 浮動小数点数 |
EmailField | メールアドレス |
これらは一部の例であり、Djangoはこれら以外にも多くのフィールドタイプを提供しています。例えば、ImageField
やFileField
はファイルのアップロードを扱い、ForeignKey
やManyToManyField
はモデル間のリレーションシップを表現します。
モデルのマイグレーション
モデルを定義したら、それをデータベースに反映する必要があります。これを行うために、Djangoはマイグレーションという機能を提供しています。マイグレーションは、モデルの変更をデータベーススキーマに適用する方法です。
マイグレーションを作成するには、以下のコマンドを実行します。
python manage.py makemigrations # Migrations for 'todo': # todo/migrations/0003_blogpost.py # - Create model BlogPost
このコマンドを実行すると、Djangoはモデルの変更を追跡し、それらの変更をマイグレーションファイルに記録します。次に、以下のコマンドを実行して、これらのマイグレーションをデータベースに適用するという流れ。
python manage.py migrate # Operations to perform: # Apply all migrations: admin, auth, contenttypes, sessions, todo # Running migrations: # Applying todo.0003_blogpost... OK
これにより、モデルの変更がデータベーススキーマに反映されます。
例えば、利用しているDBMSがMySQLの場合、スキーマ反映後は以下のようにきちんとテーブルが作成されていることが分かります。
mysql> desc todo_blogpost; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | bigint | NO | PRI | NULL | auto_increment | | title | varchar(200) | NO | | NULL | | | content | longtext | NO | | NULL | | | pub_date | datetime(6) | NO | | NULL | | +----------+--------------+------+-----+---------+----------------+
以上が、Djangoモデルの基本的な概念とその使用方法です。次のステップでは、具体的なモデルの作成方法について詳しく見ていきましょう。
ステップ2:Djangoモデルの作成方法
前章ではDjangoモデルの基本的な概念を学びました。今回はその知識を活かし、具体的なモデルの作成方法について見ていきましょう。
Djangoモデルを作成するためには、まず新しいアプリケーションを作成。以下のコマンドを実行して新しいアプリケーションを作成します。
python manage.py startapp your_app_name
このコマンドを実行すると、新しいアプリケーションディレクトリが作成され、その中にはmodels.py
というファイルが作成されます。
このmodels.py
ファイルが、モデルを定義する場所です。
ブログ投稿を表すモデルを作成する場合、このmodels.py
にモデルを編集することで先ほどのようなテーブルを作成することができます。
from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField('date published')
あとは、マイグレーション。マイグレーションを実行する際には、特定のアプリケーションを指定することもできます。
python manage.py makemigrations your_app_name
このコマンドを実行すると、Djangoはyour_app_name
アプリケーションのモデルの変更を追跡し、それらの変更をマイグレーションファイルに記録します。
ステップ3:Djangoモデルの操作方法
ここまでで、モデル(models.py)を作成し、データベースに反映する方法を学びました。
次はモデルを使ってデータベースの操作を行う方法について解説します。具体的には、データの作成、取得、更新、削除(CRUD操作)について説明します。
データの作成
Djangoモデルを使って新しいデータを作成するには、モデルクラスのインスタンスを作成し、それを保存。以下に、BlogPost
モデルを使って新しいブログ投稿を作成する例を示します。
from django.utils import timezone from .models import BlogPost post = BlogPost(title='My first post', content='This is my first post.', pub_date=timezone.now()) post.save()
この例では、まずBlogPost
クラスのインスタンスpost
を作成しています。BlogPost
の括弧内には、各フィールドの初期値を指定。
ここでは、title
には'My first post'
、content
には'This is my first post.'
、pub_date
には現在の日時(timezone.now()
)を設定しています。
最後に、save()
メソッドを呼び出すことで、このインスタンスをデータベースに保存しています。この操作により、新しいブログ投稿がデータベースに作成されるという仕組みです。
データの取得
データベースからデータを取得するには、モデルクラスのobjects
属性を使用します。objects
属性は、モデルクラスに対するデータベースクエリを表すマネージャオブジェクトです。
以下に、すべてのブログ投稿を取得する例を示します。
posts = BlogPost.objects.all()
この例では、BlogPost.objects.all()
がすべてのBlogPost
オブジェクトを返します。この結果はPythonのリスト。つまり、forループを使って各ブログ投稿を順に処理することができる仕組みです。
データの更新
データを更新するには、①データを取得し、②その属性を変更し、③再度保存します。以下に、最初のブログ投稿のタイトルを更新する例を示します。
post = BlogPost.objects.get(pk=1) post.title = 'Updated title' post.save()
この例では、まずget()
メソッドを使用して最初のブログ投稿を取得しています。get()
メソッドは、指定した条件に一致するオブジェクトをデータベースから取得します。ここでは、主キー(pk
)が1のブログ投稿を取得しています。
次に、取得したブログ投稿のtitle
属性を更新し、save()
メソッドを呼び出して変更をデータベースに保存しています。
この操作により、ブログ投稿のタイトルが更新されます。
データの削除
データを削除するには、削除したいオブジェクトを取得し、そのdelete()
メソッドを呼び出します。以下に、最初のブログ投稿を削除する例を示します。
post = BlogPost.objects.get(pk=1) post.delete()
この例では、まずget()
メソッドを使用して最初のブログ投稿を取得。次に、delete()
メソッドを呼び出してこのブログ投稿をデータベースから削除しています。この操作により、指定したブログ投稿がデータベースから削除されるという流れです。
以上が、Djangoモデルを使ったデータベースの基本的な操作方法です。これらの操作を理解し、適切に使い分けることで、Pythonコードからデータベースを効率的に操作することができるようになります。
Djangoモデル(models.py)のまとめ
始めてPythonを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。
Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!
読者料典 Python入門:学習カリキュラム ←こちらから!