1. ホーム
  2. パイソン

解決する Djangoのマイグレーション 変更が検出されない テーブルを作成できない

2022-03-02 11:03:12
<パス

原因

テーブルの構造を変更した後、以下を実行します。 python3 manage.py migrate エラーになります。

django.db.utils.OperationalError: (1091, "Can't DROP 'email'; check that column/key exists")

そこで、このテーブルを再生成しようと思い、データベースに入り、該当するテーブルを削除しました。
テーブルを削除した後に実行します。

python3 manage.py makemigrations
python3 manage.py migrate

まだテーブルを生成できません、ヒント。 No changes detected

プロセス

まず、アプリの対応するディレクトリにあるデータベースファイルとキャッシュファイルを削除します。

$ rm -rf migrations/ __pycache__/

再実行する。

$ python3 manage.py makemigrations
No changes detected
$~/code/django/blogproject$ python3 manage.py makemigrations comments
Migrations for 'comments':
  comments/migrations/0001_initial.py
    - Create model Comment
$~/code/django/blogproject$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, blog, comments, contenttypes, sessions, users
Running migrations:
  No migrations to apply.

データベースにアクセスすると、テーブルがまだ生成されていないことがわかります。

そして、テーブルの作成を記録している django_migrations テーブルを見つけ、該当するテーブルを削除します。

delete from django_migrations where app='yourappname';

generate databaseコマンドを再実行します。

$ python3 manage.py makemigrations comments
No changes detected in app 'comments'
$~/code/django/blogproject$ python3 manage.py migrate comments
Operations to perform:
  Apply all migrations: comments
Running migrations:
  Applying comments.0001_initial... OK

データテーブルが正常に生成されました。

まとめ

を実装した後
python3 manage.py makemigrations
python3 manage.py migrate
これを実行すると、0001_initial.pyに対応するモデルスクリプトが作成されるだけでなく、作成されたモデルのデータベースレコードも作成されます。データベースを再生成したい場合は、両方の場所を削除する必要があります。