DjangoでMySQLデータベースを設定する方法

この章ではDjangoとMySQLの接続およびデータベース作成についてまとめます

一、DataGripで新しいプロジェクト構造を作成する

構造名はsettingファイル内のデータベース名と一致します

二、テーブル構造の定義

必要なappディレクトリのmodelsファイルにテーブルクラスを作成します(以下は従業員管理システムの例)

from django.db import models


# モデルを作成します
class Division(models.Model):
    """部門テーブル"""
    name = models.CharField(verbose_name="部門名",  # このパラメータは注釈として機能します
                             max_length=32)


class Employee(models.Model):
    """従業員テーブル"""
    full_name = models.CharField(verbose_name="氏名", max_length=16)
    secret = models.CharField(verbose_name="パスワード", max_length=64)
    years = models.IntegerField(verbose_name="年齢")
    balance = models.DecimalField(verbose_name="残高", max_digits=10,  # 全体の数字長
                                  decimal_places=2,  # 小数点以下の桁数
                                  default=0)  # デフォルト値
    join_date = models.DateTimeField(verbose_name="入社日",
                                       auto_now_add=True)  # 自動的に現在時刻を追加
    
    # Djangoでの制約
    gender_options=(
        (1,"男性"),
        (2,"女性"),
    )
    gender=models.SmallIntegerField(verbose_name="性別", choices=gender_options)

    # 制約なしの書き方
    # division_id = models.BigIntegerField(verbose_name="部門ID")

    # 1.制約ありの書き方(データベース制約による)
    # -to はどのテーブルと関連付けるかを示します
    # -to_field はどのテーブルのどのフィールドと関連付けるかを示します
    # 2.この書き方はDjangoの特有の書き方で、フィールド名の後に必ず"_id"が付加されます
    # つまり以下のdivisionは、データベース内ではdivision_idとなります
    # 3.部門テーブルが削除された場合
    # ###3.1 紐付け削除(CASCADE)
    division = models.ForeignKey(to="Division", to_field="id", on_delete=models.CASCADE)
    # ###3.2 NULLに設定
    # division = models.ForeignKey(to="Division", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)



ここでは2つのテーブルが作成されています:部門テーブルDivisionと従業員テーブルEmployee

Employeeテーブルはdivision_idを外部キーとしてDivisionテーブルと関連付けられています

三、テーブルの作成

(方法1)コマンドライン経由

プロジェクトのターミナルで以下を入力します

python manage.py makemigrations
python manage.py migrate

(方法2)PyCharmツール経由

ツールバーの「manage.pyタスクを実行」を開きます

次に以下を入力します

makemigrations
migrate

上記の2つの方法でテーブルを作成すると、DataGripで作成したテーブルを確認できるようになります

タグ: Django MySQL Python ORM データベース設計

8月12日 00:06 投稿