10đź‘Ť
First, create a backup of your database. Copy it to your development machine. Try things out on that. That way it doesn’t matter if it does go “boom” for some reason.
The first thing to do is
python manage.py showmigrations
This shows all the existing migrations, and it should show that they have been applied with an [X]
.
Then,
python manage.py makemigrations
Makes a new migration file for your new model (name 00004_…).
Then do
python manage.py migrate
to apply it. To undo it, go back to the state of migrations 00003, with
python manage.py migrate <yourappname> 00003
4đź‘Ť
There are two steps to migrations in Django.
./manage.py makemigrations
will create the migration files that you see – these describe the changes that should be made to the database.
You also need to run
./manage.py migrate
this will apply the migrations and actually run the alter table commands in SQL to change the actual database structure.
Generally adding fields or tables won’t affect anything else in the database. Be more careful when altering or deleting existing fields as that can affect your data.
The reason for two steps is so that you can make changes on a dev machine and once happy commit the migration files and release to your production environment. Then you run the migrate command on your production machine to bring the production database to the same state as your dev machine (no need for makemigrations on production assuming that your databases started the same).
- [Django]-Django get query execution time
- [Django]-Urls.py redirect with URL reversal and parameters — is there any easier way?
- [Django]-In django, is it possible to have a foreign key defined to some superclass, but having returned the subclass when queried?
2đź‘Ť
My question is now how do I “create” this boom table using the
migration script and the boom model?
./manage.py makemigrations
I am worried that I might accidentally disrupt anything that is
already in DB.
The whole point of migrations, is that it doesn’t
I know that it has something to do with manage.py and running migrate
or runmigration
For more information please refer to : https://docs.djangoproject.com/en/1.10/topics/migrations/
And rest assured that your database will not go boom! 🙂
- [Django]-Show management commands in admin site
- [Django]-Django: How to remove bullet point when printing form errors
- [Django]-How to allow editing of templates for email by admin user in Django?
- [Django]-How to solve UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
1đź‘Ť
I solved it simply, changing the name of the new model to the original name, and then I checked if there is the table in the database, if not, I just create a new table with the old name with just a field like id.
And then clear migrations and create new migrations, migrate and verify table was fixed in DB and has all missing fields.
If it still doesn’t work, then change the model name back to a new one.
but when django asks you if you are renaming the model you should say NO to get the old one removed properly and create a new one.
This type of error usually occurs when you delete some table in dB manually, and then the migration history changes in the tables are lost.
But it is not necessary to erase the entire database and start from scratch.
- [Django]-Django AllAuth gives SSLError
- [Django]-Remove a migration from south migration history
- [Django]-Issue with returning Cyrillic symbols from MSSQL via unixODBC and FreeTDS
- [Django]-Python & Django on a Mac: Illegal hardware instruction
- [Django]-Django makemigrations No changes detected in app