Unapplying Django Migrations
This lesson will show you how to undo database changes and switch to an earlier database schema. To unapply a migration, you have to call migrate
with the name of the app and the name of the migration before the migration you want to unapply.
00:01 Now you’ll see how to unapply migrations. Sometimes you might want to undo changes and switch back to an earlier database schema, possibly because you realize the change you made was a bad idea, you want to test a migration someone else wrote, you want to work on multiple features with different database changes in parallel, or you want to restore a backup that was created when the database still used the older schema. Migrations don’t have to be a one-way street.
00:29
Often, the effects of a migration can be undone by unapplying it. To unapply a migration, you call migrate
with the name of the app and the name of the migration which was prior to the one you want to unapply. Let’s see that in action with historical_data
.
00:54
And you can see that the unapplying of historical_data.0002
has been done, and you can verify that in two ways. You can use the showmigrations
command.
01:13
Now you can see that the second migration is no longer applied, and you can also use dbshell
to check this.
01:32
Now you can see that "volume"
is an integer
and no longer a decimal
.
melissac on April 10, 2023
@manu, I’m a beginner so take this for what it’s worth, but I don’t think his command was unapplying 0001, I think it was reverting to 0001. In order to revert to 0001, it unapplies 0002 (and anything else after that, if there had been more migrations).
Darren Jones RP Team on April 12, 2023
@manu - Sorry for missing your comment previously. Melissac is correct - it’s reverting to 0001, and does so by unapplying 0002 (and anything after that if there had been others to unapply).
Become a Member to join the conversation.
Manu on Feb. 5, 2023
Hi Darren, you unapplied migration 0001_initial, why it applied for 002_auto.... migration. could you please clarify on this thanks.