久しぶりに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
参考資料