–fake-initial vs –fake in Django migration?

Well the documentation is very clear about this

–fake-initial

Allows Django to skip an app’s initial migration if all database
tables with the names of all models created by all CreateModel
operations in that migration already exist. This option is intended
for use when first running migrations against a database that
preexisted the use of migrations. This option does not, however, check
for matching database schema beyond matching table names

You were asking about the risks, well here it is

only safe to use if you are confident that your existing schema
matches what is recorded in your initial migration.

–fake

Tells Django to mark the migrations as having been applied or
unapplied, but without actually running the SQL to change your
database schema.

This is intended for advanced users to manipulate the current
migration state directly if they’re manually applying changes;

Once again risks are clearly highlighted

be warned that using –fake runs the risk of putting the migration
state table into a state where manual recovery will be needed to make
migrations run correctly.

This answer is valid not just for django versions 1.8+ but for other versions as well.

edit Nov, 2018: I sometimes I see answers here and elsewhere that suggest that you should drop your databae. That’s almost never the right thing to do. If you drop your database you lose all your data.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)