#概要
今、開発しているdjangoのprojectのmigration時に、models.pyのコートを書いては消し、としているので、よくデータベースを消すはめになります
そこで、自分で調べてみて、簡単にmigrationの変更を削除、更新できるようにしたいと考え、忘備録として記していこうと思います。また私の環境で
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
と書いたら、Djangoを再インストールするハメになったので。このコマンドは使わないようにします。
#開発環境
django==3.2.1
python==3.9.1
データベース==MySQL
#きっかけ
今回、私はaccountsというアプリケーションの中のmodelsに、UserというAbstractBaseUserをオーバーライドさせたmodelsを作成したのですが、primary_keyを設定して、makemigrationsしてしまったので、こんなのがターミナルに毎回出てきてしまいます。
WARNINGS: accounts.User: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
これを消すために、migrateして、データベースに保存されてしまったprimary_keyの値をなかったことにしたいと思います。
#migrateのコマンドまとめ
- makemigrations
python manage.py makemigrations (アプリケーション名)
- migrate
python manage.py migrate (アプリケーション名)
- migrationした時のnameを変更
python manage.py makemigrations --name (付けたい名前)
- migrateの履歴を見る
python manage.py showmigrations (アプリケーション名)
- [ ]=migrateしてない
- [ X ]=migrate済み
- migrateの巻き戻し
python manage.py migrate (ファイル名)
- ファイル名というのは0001や0002から始まるファイルを指しています。
指定したファイル名の直前まで、巻き戻すことになります。 - migrateを全てやり直し
python manage.py migrate (アプリケーション名) zero
- 履歴からも削除
- migrationファイルを削除
#私の場合
python manage.py showmigrations accounts
結果
accounts [X] 0001_initial
[]の中のX
はmigrateした際に、表示されます。(makemigrations時には空のままです。)
migrate時にデータベースの方にmodelが保存されるようです。つまり、このX
が消えれば、データベースの変更がなくなるらしい。なので、次のコマンドを使って、migrateをなかったことにしてみます。
python manage.py migrate accounts zero
結果
accounts [ ] 0001_initial
となりました。
これを完全に消すためには、アプリケーション内のmigrationsと__pychahe__の中にある0001から始まるファイルを消します。
この後、使っていたデータベースも削除して、makemigrations,migrateを行いましたが、warningは消えませんでした。。。
とりあえず、errorにはなっていないので、このまま進めていこうと思います。
このwarningについて、知見のある方は連絡をしていただけると助かります。