Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Django】モデルのデータ変更時のマイグレーション方法


Djangoの場合ですが、モデルの内容を変更した時はマイグレーションという操作を実行しなければデータベースへ反映されません。

 

そのマイグレーションの方法を備忘録として残しておきます。

 

Djangoではデータベースとしてsqliteを使用するとすると、「db.sqlite3」というファイルでデータベースは管理されることになります。

このファイルは、

 

python manage.py makemigrations

 

にて作成することができます。

 

 

 

ここからは実際に作成されたモデルを変更する場合の例となります。

まずはじめにモデルが以下のように登録されているものとします。

 

models.py

from django.db import models
from django.utils import timezone

class Music(models.Model):
    title = models.CharField('タイトル', max_length=50, null=True)
   created_at = models.DateTimeField('日付', auto_now_add=True, null=True) def __str__(self): return self.title

 

この中に、artistのデータを追加しようとする場合にはたとえば以下のように変更することになります。

 

models.py

from django.db import models
from django.utils import timezone

class Music(models.Model):
    title = models.CharField('タイトル', max_length=50, null=True)
artist = models.CharField('アーティスト', max_length=50, null=True)
   created_at = models.DateTimeField('日付', auto_now_add=True, null=True) def __str__(self): return self.title

 

Djangoのモデルの変更の場合、この追加を行ってファイル保存を行いますが、この変更とファイル保存だけではmodels.pyファイルは更新されますがデータベースの更新まではされません。

データベース側も更新するためには、変更のたびにマイグレーションという操作が必要になります。

 

その場合の方法は以下のようになります。

 

 

目次

 

1.モデルのマイグレーション方法

 

 

まず、Windowsならコマンドプロンプト、Macならターミナルにて、該当するDjangoプロジェクトのmanage.pyのあるディレクトリに移動します。

 

続いて、以下にてmodels.pyの内容からマイグレーションファイル(中間ファイル)が作成されます(appnameは適宜プロジェクトのアプリ名に変更)。

 

python manage.py makemigrations appname

 

その後で、以下を実行することで、マイグレーションファイルの内容をデータベースに反映します。

 

python manage.py migrate appname

 

 

2.マイグレーションの状況確認方法

 

終了後、以下にてマイグレーションの状況を確認できます。

 

python manage.py showmigrations appname

 

 

関連記事:

【Django】マイグレーション実行時に「sqlite3.OperationalError: table "**********" already exists」のようなエラーが出た時の対処方法 - Django Girls and Boys 備忘録

 

【Django】Djangoでのhtml(javascript)側からpython(views.py)側へ値を送る時の方法の一例 - Django Girls and Boys 備忘録

 

【Django】モデルの各フィールドの設定例(CharField、IntegerField、FloatField、DateTimeFieldなど) - Django Girls and Boys 備忘録

 

【Django】モデル内のレコード(オブジェクト)を削除する方法 - Django Girls and Boys 備忘録

 

【Django】モデルのデータ変更時のマイグレーション方法 - Django Girls and Boys 備忘録

 

【Django】モデルのインスタンス生成時のエラー情報(invalid literal for int() with base 10:) - Django Girls and Boys 備忘録

 

【Python】「文字列として受け取ったリスト」をリストに復元した時の対処方法、変換方法 - Django Girls and Boys 備忘録

 

【Git】Gitのダウンロード、インストール方法 - Django Girls and Boys 備忘録

 

【Git GitHub】初心者、初級者におすすめの入門書 - Django Girls and Boys 備忘録

 

【Python Django】git init について - Django Girls and Boys 備忘録

 

【Git】ユーザー名とメールアドレスの設定方法 - Django Girls and Boys 備忘録

 

【Git】git addとステージングエリア(インデックス)への登録について - Django Girls and Boys 備忘録

 

【Git】git commitとローカルリポジトリへの登録、gitの概略イメージ - Django Girls and Boys 備忘録

 

【Git GitHub】GitHubのアカウント作成方法 - Django Girls and Boys 備忘録

 

【Git GitHub】公開鍵の設定方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Gitのダウンロード、インストールから「git add」、「git commit」によるGitへの登録までの一通りの方法 - Django Girls and Boys 備忘録

 

【Git GitHub】「git add」、「git commit」後の「git push」について、リモートリポジトリにプッシュする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】プルリクエストとマージを実行する方法 - Django Girls and Boys 備忘録

 

【Git GitHub】リモートリポジトリをクローンする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Git、GitHubのダウンロード、インストール、「git add」、「git commit」によるGitへの登録と「git push」、マージによるGitHubのmasterへの反映とクローンまでの一通りの方法 - Django Girls and Boys 備忘録