Django Migrations


Migrations

  • Djangoがモデルの変化をどのように反映するか
  • Migrations Commands

  • 移行およびデータベース・モードのいくつかのコマンド
  • makemigrations
  • モデルの変更に基づいて新しい移行(設計図)を作成する場合は
  • を使用します.
  • migrate
  • を使用してDBに移行
  • 設計図から実際のデータベースへのプロセス
  • モデルでの変更DBモードに同期したファイルルーム
  • sqlmigrate
  • の移行を表示するSQL構文
  • 移行はSQL文でどのように解釈されますか?
  • showmigrations
  • を使用して、プロジェクト全体の移行ステータスを確認します.
  • 移行ファイル
  • 移行済みかどうか

    移行の試行


    models.pyの作成

    class Movie(models.Model) :
        title = models.CharField(max_length=10)
        description = models.TextField()
  • 各モデルはdjangoです.models.モデルクラスとして表示されるサブクラス
  • django.db.modelsモジュールを継承するmodelクラス
  • モデルモジュールで定義されるDB列のタイプを定義します.
  • titleおよびcontentはモデルを表すフィールド
  • 各フィールドはクラス属性として指定され、各属性は各データベースのカラムにマッピングされる.

    モデルフィールド


  • CharField (max_length = None, **options)
  • を使用して、限られた長さの文字列
  • を挿入します.
  • CharFieldの最大長は必須パラメータ
  • である.
  • フィールドの最大長(文字)、データベース・レベル、Django検証は
  • を使用します.

  • TextField(**options)
    最大
  • 文字の場合は
  • を使用します.
  • max lengthオプションを作成すると、モデルおよびデータベース・レベルには適用されませんが、テキスト領域コンポーネント(自動フォーム・フィールド)に反映されます.
  • max lengthを使用するには、CharFieldで
  • を使用する必要があります.

  • DateFields

  • auto_now_add
  • 初期作成日
  • Django ORMは、最初の挿入時にのみ現在の日付と時刻(テーブルに最初に含む値)
  • に更新する.

  • auto_now

  • 最終変更日

  • Django ORMが保存されるたびに、現在の日付と時刻に更新されます.
  • $ python manage.py makemigrations
  • 'migrations/0001_initial.pyの作成を確認する
  • $ python manage.py migrate

  • 0001_initial.py設計図を実際のデータベースに反映する

  • sqlite 3を確認して実際のデータベーステーブルを確認
  • $ python manage.py sqlmigrate app_name 0001
  • 移行設計図がSQL文を使用して解釈する方法を事前に決定することができる
  • BEGIN;
    --
    -- Create model Movie
    --
    CREATE TABLE "movies_movie" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "title" varchar(20) NOT NULL, "description" text NOT NULL, "user_id" bigint NOT NULL REFERENCES "accounts_user" ("id") DEFERRABLE INITIALLY DEFERRED);
    --
    -- Create model Comment
    showmigrations
    python manage.py showmigrations
  • 移行設計図が
  • 移行されたかどうか