2017-01-19 8 views
1

私は自分のデータベースにテーブルをドロップしました。移行を再実行すると、エラーテーブルが存在しませんでした。いくつかの狩りの後、私は自分のアプリ名を持っている私のdjango_migrations内のすべてを取り除くことができたことを学びました。だから私はそれをやって、それがうまく動作し始めてから、落とされなかったテーブルを掴んだ。django移行地獄は、テーブルを削除しました。

私はちょうど1つのテーブルをもう一度手に入れて、それをそのままにしておくことはできません...とにかくこれを行うには?

データベースのデータの90%は気にせず、テーブルとフィールドはほんのわずかです。私が落としたテーブルは、データについては何も気にしませんでした。

答えて

1

django_migrationsテーブルを調べることから始めます。これには、移行がすでに実行されているデータが含まれています。このデータを実際の移行ファイルと比較して、どのファイルが実行されているかを確認します。

最後に、django_migrationsの行を削除し、元の移行ファイルを変更して必要なテーブルを再作成しないでください。

+0

手動で実行している場合は、移行ファイルの依存関係を削除できますか? – Codejoy

+0

ええ、あなたの移行が偶数で終わる限り(あなたはそれらを実行して何も変わらない)、あなたは大丈夫です。 –

2

sqlmigrateコマンドを使用すると、Djangoが実行するSQLコマンドを印刷できます。次に、削除したテーブルを再作成して手動で適用するために必要なコマンドを選択できます。

テーブルがすべて再配置されたら、migrate <app_name> --fakeを使用して移行履歴を転送することができます.Djangoはこのアプリの移行が適用されていることを認識しています。

+0

このdjango-admin sqlmigrate swsite mymigrationを実行すると、エラーが発生しました:django.core.exceptions.ImproperlyConfigured:DEFAULT_INDEX_TABLESPACEの設定が要求されましたが、設定が構成されていません。設定にアクセスする前に環境変数DJANGO_SETTINGS_MODULEを定義するか、settings.configure()を呼び出す必要があります。一息。これはすべてpostgresがタイムゾーンに問題があったためです。 – Codejoy

+1

'python manage.py sqlmigrate'を実行するだけです。 'django-admin'を使うことができますが、明示的に設定モジュールを設定する必要があります。 – knbk

+0

そのコマンドは引数が足りないことを示します。それは私がそれらを個別に実行することができると思うより多くのアプリ名と移行名のようにしたいですか? – Codejoy