[Django]-How to recreate a deleted table with Django Migrations?

91๐Ÿ‘

โœ…

In django 1.7 you can try:

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

If you are working in django 1.9.5 this is the 100 % solution for this problem:

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

This works 100% for me!

๐Ÿ‘คRaรบl EL

24๐Ÿ‘

Jan 2021

I had a migration problem and I had to drop/delete a table by pgadmin. Then, when I makemigrations and migrate the table wasnโ€™t recreated. In this way, Iโ€™ve found this procedure which worked for me:

python manage.py migrate --fake app_name zero 
python manage.py migrate app_name

[NOTE]

  • If you donโ€™t have the intended migration file, create that before the above commands by python manage.py makemigrations
  • If you donโ€™t want to roll back to the initial(zero) state use the number of migration file instead of zero, e.g. python manage.py migrate --fake myappname 0005
  • I tested this approach in Django 2.2

Read More

๐Ÿ‘คBenyamin Jafari

19๐Ÿ‘

There isnโ€™t an easy way to get Django to recreate a table that you have deleted manually. Once your database is altered manually, Djangoโ€™s view of the database (from migrations) is different from reality, and it can be tricky to fix.

If you run the sqlmigrate command, it will show you the required SQL to create the table. You can run the sql in a database shell. Assuming your app name is students, and the migration that created the table was 00XX_create_students.py, you would do:

./manage.py sqlmigrate students 00XX_create_students

Be careful if there are foreign keys to or from the students table, the constraints will have to be created as well.

๐Ÿ‘คAlasdair

16๐Ÿ‘

The only way that worked for me:

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

Copy what it prints out (or, depending on what you have actually removed from the DB, only part of the SQL queries).

Apply those copied queries to your DB:

psql -U user_name -h 127.0.0.1 database_name

Paste what you have copied from the SQL queries printout.

Commit the queries.

And thatโ€™s it โ€“ your missing tables are created.

๐Ÿ‘คAirstriker

5๐Ÿ‘

The answer that worked for me is as follows:

Assume in your database a table of a model has been deleted and you need to re-create, then do the following.

  • comment out the model in models.py that creates the table that has been deleted (either the model class or a line that creates a table like a = models.ManyToManyField(...))

  • run: python manage.py makemigrations <app-name>, where <app-name> is the name of of the app where you have models.py

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

  • un-comment the model in models.py

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

  • run: python manage.py migrate <app-name> (without the โ€“fake)

and you the table should be back in the database. But any data that was in the table will be lost.

๐Ÿ‘คBruno Vermeulen

2๐Ÿ‘

Delete the migration folder from your migration app folder and simply run the migration commands:

  1. python3 manage.py makemigrations appname
  2. python3 manage.py migrate
๐Ÿ‘คnavdeep singh

1๐Ÿ‘

For Django 1.10.4
I deleted the db.sqlite3 file from the project folder and then ran the following commands:

  1. python manage.py makemigrations app_name
  2. python manage.py migrate
๐Ÿ‘คsiddharth

1๐Ÿ‘

I just deleted my migrations folder, dropped the whole database, then i made migration for the app

python3 manage.py makemigration 
python3 manage.py migrate

and it came back.

1๐Ÿ‘

Rename the deleted table name to some_new_name in the models.py and run:

python3 manage.py makemigration
python3 manage.py migrate

again rename the some_new_name table to the original name and run

python3 manage.py makemigration
python3 manage.py migrate

finally, go to the dbshell and drop the table some_new_name

0๐Ÿ‘

I create table manualy and it helps.

0๐Ÿ‘

Django 1.11.2 using MariaDB, accidental drop of database table.
To recreate table, try the following:
1/ Delete all except for init.py in your app/migrations directory
2/ select * from django_migrations; delete from django_migrations where app = โ€˜yourappโ€™;
3/ Check your model is good and run: python manage.py makemigrations
4/ python manage.py migrate

Works for me!

๐Ÿ‘คuser2519486

0๐Ÿ‘

if you have created your classes and performed the migration operation, and then you want to add items to your classes, empty the migration folder with this command beforehand.
In Django 3, I proceeded according to the following steps and it worked 100%

  1. python manage.py makemigrations appname --empty
  2. python manage.py makemigrations appname
  3. python manage.py migrate
๐Ÿ‘คAghil Padash

0๐Ÿ‘

Actually, the above methods did not work for me, so I just perform the below workaround as I did not want to manually write the whole query to create the table.

So I changed the database in the settings file and re-ran the migrations command after deleting the migrations folder, then just performed the python migrate command it created new tables in another database then from there just opened the table in query view, copied the script, and inserted the table in my main database.

๐Ÿ‘คsimar

0๐Ÿ‘

Another Simple way to do this is

  • Go to your migrations folder.
  • Search for the file which contains the code to create the Students table in DB.
  • Remove the code snippet from the file and save it.
  • Then run py manage.py makemigrations and py manage.py migrate again

This worked for me ๐Ÿ™‚

๐Ÿ‘คAkshay Ratimani

0๐Ÿ‘

In this case, you need to trick django!
Do one thingโ€ฆ

  • copy the "students" model in models.py with other name like
    "studentscopy".
  • Now run โ€“> python manage.py makemigration
  • It will create a new migration in migration package of your app. Open
    that last migration and rename "studentscopy" back to "students"
    in that file.
  • Now run โ€“> python manage.py migrate

It will create the table again with "students" name and at last delete that "studentscopy" model from your models.py file.

๐Ÿ‘คShashank Jain

0๐Ÿ‘

Below steps solved the problem for me

  1. Delete all migrations files

  2. python manage.py makemigrations (Create your initial migration file 0001_inital.py)

  3. python manage.py migrate โ€“fake <app_name> zero

( Tell Django to mark the migrations as having been applied or unapplied, but without actually running the SQL to change your database schema. This brings the migrations to zeroth state. Otherwise Django will think thereโ€™s no change to apply )

  1. python manage.py migrate
๐Ÿ‘คAditya Ganguli

0๐Ÿ‘

I know this question is old and I tried a lot of what was in this thread, but ultimately what fixed it for me was this:

python manage.py migrate --run-syncdb
๐Ÿ‘คnewbie

Leave a comment