2 flat logo on transparent 256
2018-07-28

Djangoでマイグレーションを実行しDBテーブルを生成する|初心者・独学者向け入門コンテンツ

091123132

PythonのフレームワークDjngoにはDBコマンドを操作せずに DBテーブルを生成するマイグレーション機能があります。

マイグレーション機能とは

Django内のファイル操作とコマンドラインからテーブルを生成したり、テーブルへカラムを追加したり、削除したりすることが可能です。

今回Djangoで新規テーブルをマイグレーションする方法を解説します

Djangoでマイグレーションを実行するまでの手順

1:Models.pyへ追加したいテーブルの名前とカラムを記載

2:マイグレーションファイルの作成

3:マイグレーションで実行されるSQLの確認

4.マイグレーションの実行

なお、今回のファイル構成は以下のような感じです

mysite/polls
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py(まずここを編集)

なおModelはMVCモデルのMにあたる部分で、フレームワークからDBテーブルへのデータの接続や管理を容易にする機能となります。

Models.pyへクラスを追加する

Djangoで生成されている、models.pyへ以下の様に model名(テーブル名)と生成するフィールド項目を記載します。

今回はUserModelを生成します。

from django.db import migrations, models

class User(models.Model):
    name  = models.CharField('username',max_length=100)
    email = models.EmailField(('email'), unique=True)
    memo = models.TextField('memo')
    author = models.CharField('管理者', max_length=100, default='管理者')
    author_mail = models.EmailField('管理者アドレス', default='[email protected]')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.author

各フィールドの解説

CharFieldは短め〜中くらいのサイズの文字列のフィールドです。

文字列で内容が多い場合はTextFieldの利用をおすすめします。

以下コードでの'email'の部分はフィールドをフォームで表示した場合の表示フィールド名です。

 email = models.EmailField(('email'), unique=True)

Djangoはフォームを自動生成することができるので、そのフォームでのフィールド表示名を指定することができます。 指定しなくてもModelの生成は可能です。

unique=Trueは重複不可の項目へ設定します。

以下はデータを新規登録・更新した場合に日付を自動で取得する際に設定できます

created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

以下はクラスはadmin画面などで、値を操作する際に必要になるので、modelの返り値としてフィールド項目を指定しています。

    def __str__(self):
        return self.author

adminで利用せずとも、設定はしたほうがいいので、こういうものだと思いModelのフィールドを1つ指定してください。

DjangoのModelフィールドの詳細解説は以下外部記事をおすすめします。

DjangoのModelフィールドの解説

マイグレーションファイルを作成

manage.pyファイルが存在するディレクトリへ移動し コマンドを実行します。

実行コマンド: python manage.py makemigrations

➜  mysite python  manage.py makemigrations
Migrations for 'polls':
  polls/migrations/0004_user.py
    - Create model User
➜  mysite python  manage.py migrate

マイグレーションファイルの作成が完了するとmigrationsフォルダ配下に新規でマイグレーションファイルが生成されます。

今回ですとpolls/migrationsへ0004_user.pyというマイグレーションファイルが生成されました。

マイグレーションファイルを実行

同じファイルディレクトリでコマンドを実行

実行コマンド: python manage.py migrate

➜  mysite python  manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0004_user... OK

以上になります。 これでModelの生成が完了しました。

その他関連記事

Djangoでページを追加し表示する|初心者・独学者向け入門コンテンツ

Djangoで発生するエラー:TemplateDoesNotExist atの解説と解消方法

DjangoとPython3でMysqlを利用する|初心者・独学者向け入門コンテンツ

Python3初心者向け|無料で使えるIDE PyCharmの紹介

Python3で画像をスクレイピングしてローカルに保存する|BeautifulSoupを利用

前の記事
次の記事