0Pricing
Python Academy · レッスン

モデルとマイグレーション

データベースを定義してマイグレーションします

「モデルとマイグレーション」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

Djangoのモデル

Djangoのモデルは、データベーステーブルの構造を定義するPythonクラスです。各属性がフィールドになります。モデルはアプリのmodels.pyに記述します。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
print('Post model defined')

フィールドの種類

Djangoには、データベースのカラム型に対応する多くのフィールド型が用意されています。

  • 短いテキストにはCharFieldを使用します(max_lengthが必要です)
  • 長いテキストにはTextFieldを使用します
  • IntegerField、BooleanField、DateTimeFieldもあります
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    views = models.IntegerField(default=0)
print('Fields map to columns')

暗黙的な主キー

Djangoはすべてのモデルに、自動的に増分するid主キーを追加します。そのため、通常は自分で主キーを宣言する必要はありません。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    # 'id' is added automatically
print('id field is automatic')

フィールドのオプション

フィールドには、動作やバリデーションを制御するdefault、null、blank、uniqueなどのオプションを指定できます。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    published = models.BooleanField(default=False)
    subtitle = models.CharField(max_length=200, blank=True)
print('Options refine each field')

日付と時刻

DateTimeField(auto_now_add=True)は、行が最初に作成された日時を記録します。auto_now=Trueを指定すると、保存するたびに更新されます。

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
print('Timestamps set automatically')

リレーションシップ

1対多の関係にはForeignKeyを使ってモデル同士を関連付けます。参照先の行が削除されたときの動作は、on_deleteで指定します。

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)

class Post(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
print('ForeignKey links Post to Author')

マイグレーションとは

マイグレーションは、モデルの変更をデータベースのスキーマ変更に変換するDjangoの仕組みです。データベース用のバージョン管理ともいえます。

# Migrations record schema changes over time
# so the database matches your models
print('Migrations track schema changes')

makemigrations

python manage.py makemigrationsはモデルを調べ、変更内容を記述したマイグレーションファイルを生成します。

# python manage.py makemigrations
# -> blog/migrations/0001_initial.py
print('makemigrations writes migration files')

migrate

python manage.py migrateは、保留中のマイグレーションをデータベースに適用し、テーブルを作成または変更します。

# python manage.py migrate
# -> Applying blog.0001_initial... OK
print('migrate applies changes to the DB')

マイグレーションの流れ

基本的な流れは、models.pyを編集し、makemigrationsを実行してから、migrateを実行するというものです。モデルを変更するたびに繰り返します。

# 1. Change models.py
# 2. python manage.py makemigrations
# 3. python manage.py migrate
print('Edit, make, migrate')

モデルのクエリ

各モデルには、クエリに使うobjectsというマネージャーが用意されます。Post.objects.all()、.filter()、.get()、.create()などを使えます。

# Post.objects.all()
# Post.objects.filter(published=True)
# Post.objects.get(id=1)
# Post.objects.create(title='Hello')
print('objects is the query manager')

理解度チェック

マイグレーションについての理解度を確認しましょう。

まとめ

モデルを定義し、マイグレーションを適用する方法を学びました。

  • モデルは、型付きフィールドを持つmodels.py内のクラスです
  • Djangoは自動的にid主キーを追加します
  • ForeignKeyでモデルを関連付け、on_deleteで連鎖削除などの動作を指定します
  • makemigrationsの後にmigrateを実行して、データベースを同期します
  • Model.objectsでデータを検索します

よくある質問

「モデルとマイグレーション」レッスンは無料ですか?

はい。「モデルとマイグレーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「モデルとマイグレーション」で何を学びますか?

データベースを定義してマイグレーションします ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「モデルとマイグレーション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. プロジェクトとアプリ
  2. モデルとマイグレーション
  3. ビューとURL
  4. Django Admin
← Python Academyに戻る