Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Consolidating Django South Migrations

In the initial stages of my project I'm making a lot of changes to the models and thus I've ended up with a lot of south migrations being generated for my apps. Is it possible to consolidate them in any way before going to my production server to perform the migrations so I don't have like a million migrations for each app? And if so, how would I go about doing that?

like image 419
hkothari Avatar asked Jan 09 '13 16:01

hkothari


People also ask

How do I merge migration files in Django?

So, in order to allow Django to merge the migrations for you, you should follow these steps: try executing python manage.py migrate (at this point Django will see that there are conflicts and will tell you to execute python manage.py makemigrations –merge)

What is South migration in Django?

South is a migration tool used with Django. There will be times when you would be adding fields to a model or changing the type of field (eg: Field was an IntegerField and you want to change it to FloatField). In such cases syncdb doesn't help and South comes to your rescue.


2 Answers

You could always delete the existing migrations and create a new "initial" migration.

To do this, you will need to:

  1. Remove the migration files for you app (remove the folder altogether)
  2. Run ./manage.py convert_to_south myapp

This will leave you with a single migration corresponding to your app's state current state.


Alternatively, you can always pack your latest migrations together:

  1. Remove the migration files that you want to merge (only if they are the latest onces)
  2. Run ./manage.py schemamigration myapp

This will create a new migration that will correspond to the migrations you removed.


Both of these will likely mess up your development DB.

like image 99
Thomas Orozco Avatar answered Oct 20 '22 06:10

Thomas Orozco


Since this is a development environment, this is how I do it (using SQLite, see below for other SQL servers):

  1. Do all the changes, let the migration files pile up. No committing migration files to VCS
  2. When done, delete all the new migration files
  3. Rename database
  4. Run manage.py migrate. This will create database structure as it was before you made any changes to it.
  5. Run manage.py makemigrations. This will create the necessary migrations that reflect your current state
  6. Move back the original database which already has the final structure & data
  7. Commit migrations files

When using "proper" SQL servers, just keep two databases: production and development. Change project settings to point to production database instead of renaming in step 3. Also, you can skip step 4.

like image 1
velis Avatar answered Oct 20 '22 07:10

velis