1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Django(Python)でマイグレーションを行う手順

Posted at

久しぶりにDjangoを触ってみてマイグレーションの実行に手間がかかったので
私用メモ的にまとめてみました。
DBはSQLiteをしようしています。

各バージョンは下記の通りです

Python:3.9.6
Django:4.1.7
SQLite:3.37.0

ディレクトリ構成は下記を例に進めていきます

myapp/
├ config
│ ├ asgi.py
│ ├ settings.py
│ └ urls.py
├ src
│ └ models.py
manage.py
db.sqlite3

モデル作成

ルートディレクトリでsrcディレクトリを作成し、その中にmodels.pyを作成します
コードはDjango公式チュートリアルを引用いただきます

models.py
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

マイグレーション用スクリプト作成

前の手順で作成したmodels.pyを使ってマイグレーション用のスクリプトを作成します
ターミナルでコマンドを実行します

python manage.py makemigrations src

コマンドを実行するとsrc配下にmigrationsディレクトリが作成され
その中に__init__.pyと0001_initial.pyが作成されます。

myapp/
├ config
│ ├ (省略)
├ src
│ ├ models.py
│ └ migrations
│   ├ __init__.py
│   └ 0001_initial.py
manage.py
db.sqlite3

SQLのコマンドを確認してみます

$ python manage.py sqlmigrate src 0001
BEGIN;
--
-- Create model Question
--
CREATE TABLE "src_question" ...
...
CREATE INDEX ...
COMMIT;

テーブル作成とインデックス作成のコマンドが確認できます。

models.pyを変更した時は

python manage.py makemigrations src

SQLを確認します

python manage.py sqlmigrate src 0002

データベースに反映

python manage.py migrate

db.sqlite3を確認してみます。
models.pyで定義したテーブルが作成されていると思います。
・src_question
・src_choice

参考資料

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?