We use Django at work, and we've been using dmigrations. While it has its quirks, it's been useful so far. Some features:
- It uses a table in the database to keep track of which migrations have been applied.
- Because it knows which ones have been applied, you can migrate up and back down.
- It integrates with
manage.py
as a command.
- The individual migration scripts are Python, but if your migration logic is pure SQL, dmigrations makes it easy to just can the SQL and have it executed.
One problem is that it only currently supports MySQL. However, one of our guys make a local hack to it to support PostgreSQL, which we use. As I recall, the hack wasn't all that extensive, so it shouldn't be terribly difficult to hack it up to support other RDBMSs.