web-dev-qa-db-ja.com

Django Migrationsで削除されたテーブルを再作成する方法は?

グループと生徒の2つのモデルがあり、それらのグループのテーブルは1つだけです。生徒のテーブルは削除されました。

操作方法Djangoもう一度作成しますか?makemigrationsを実行すると、「変更は検出されませんでした」と出力されます。

管理者ページで、生徒のテーブルをクリックすると、例外がスローされます。

relation "students_students" does not exist

Django 1.7で試すことができます:

1. Delete your migrations folder

2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
   You could alternatively just truncate this table.

3. python manage.py makemigrations

4. python manage.py migrate --fake

Django 1.9.5で作業している場合、これはこの問題の100%の解決策です:

1. Delete your migrations folder

2. In the database: DELETE FROM Django_migrations WHERE app = 'app_name'.
   You could alternatively just truncate this table.

3. python manage.py makemigrations app_name

4. python manage.py migrate

これは100%機能します!

42
Raúl EL

Django手動で削除したテーブルを再作成する簡単な方法はありません。データベースを手動で変更すると、Djangoのデータベースの(移行からの)ビューは実際とは異なります。修正するのが難しい場合があります。

sqlmigrate コマンドを実行すると、テーブルの作成に必要なSQLが表示されます。 SQLはデータベースシェルで実行できます。アプリ名がstudentsで、テーブルを作成した移行が00XX_create_students.py、あなたはそうするでしょう:

./manage.py sqlmigrate students 00XX_create_students

学生テーブルとの間で外部キーがある場合は、制約も作成する必要があるので注意してください。

10
Alasdair

Django 2の場合、これを行います:

 1. Delete your migrations folder

 2. In the database: `DELETE FROM Django_migrations WHERE app = 'app_name';`

 3. python manage.py makemigrations app_name

 4. python manage.py migrate

 5. python manage.py migrate --fake default   //This was the key to solve my problem
6
Alex Jolig

移行アプリフォルダーから移行フォルダーを削除し、移行コマンドを実行します。

  1. python3 manage.py makemigrations appname
  2. python3 manage.py migrate
1
navdeep singh

私のために働いた唯一の方法:

rm -r <app-name>/migrations/
python manage.py makemigrations <app-name>
python manage.py sqlmigrate <app-name> 0001_initial

出力内容をコピーします(または、実際にDBから削除したものによっては、SQLクエリの一部のみをコピーします)。

コピーしたクエリをDBに適用します。

psql -U user_name -h 127.0.0.1 database_name

SQLクエリの印刷出力からコピーしたものを貼り付けます。

クエリをコミットします。

これで完了です。欠落しているテーブルが作成されます。

0
Airstriker

削除したテーブルの名前をmodels.pyのsome_new_nameに変更して実行します。

python3 manage.py makemigration
python3 manage.py migrate

もう一度some_new_nameテーブルの名前を元の名前に変更して実行します

python3 manage.py makemigration
python3 manage.py migrate

最後に、dbshel​​lに移動して、テーブルsome_new_nameを削除します

0

Django 1.10.4の場合、プロジェクトフォルダーからdb.sqlite3ファイルを削除し、次のコマンドを実行しました。

  1. python manage.py makemigrations app_name
  2. python manage.py migrate
0
siddharth

次のコマンドを実行してください:

python manage.py migrate --run-syncdb
0
Ozzy

MariaDBを使用するDjango 1.11.2、データベーステーブルの偶発的なドロップ。テーブルを再作成するには、以下を試してください。1/app/migrationsディレクトリのinit。pyを除くすべてを削除2/select * from Django_migrations; app = 'yourapp';のDjango_migrationsから削除します。 3 /モデルが適切であることを確認して実行します:python manage.py makemigrations 4/python manage.py migrate

私のために働く!

0
user2519486

私のために働いた答えは次のとおりです:

データベースでモデルのテーブルが削除され、再作成する必要があると仮定してから、次の手順を実行します。

  • 削除されたテーブルを作成するmodels.pyのモデルをコメントアウトします(モデルクラスまたはa = models.ManyToManyField(...)のようなテーブルを作成する行)

  • 実行:python manage.py makemigrations <app-name>、 どこ <app-name>は、models.pyがあるアプリの名前です。

  • 実行:python manage.py migrate --fake <app-name>

  • models.pyでモデルのコメントを外します

  • 実行:python manage.py makemigrations <app-name>

  • 実行:python manage.py migrate <app-name>(--fakeなし)

そして、あなたはテーブルがデータベースに戻っているはずです。ただし、テーブルにあったデータはすべて失われます。

0
Bruno Vermeulen

私は手動でテーブルを作成し、それが役立ちます。

Migrationsフォルダーを削除し、データベース全体をドロップした後、アプリの移行を行いました

python3 manage.py makemigration 
python3 manage.py migrate

そして戻ってきた。