Ticket #1063 (closed enhancement: worksforme)
More meaningful error messages about database errors during the migration
|Reported by:||lumi77||Owned by:||andrew|
To mention a concrete example, a database migration was failing on
db.delete_unique('guardian_userobjectpermission', ['user_id', 'object_id', 'content_type_id', 'permission_id'])
The constraint was actually present in the database. So I'm not sure why MySQL decided that it does not exist. The easy way to complete the migration would be to inspect which step failed, delete the constraint manually in the database, comment out the line above and rerun the migration.
It would be nice if South displayed an error message about what went wrong. At the moment, I get a stack trace from further processing where South tries to rollback the migration step.
My simple approach to find out what the database error was - print the exception in run_migration
def run_migration(self, migration): migration_function = self.direction(migration) south.db.db.start_transaction() try: migration_function() south.db.db.execute_deferred_sql() except Exception, e: print e south.db.db.rollback_transaction() if not south.db.db.has_ddl_transactions: print self.run_migration_error(migration) raise else: south.db.db.commit_transaction()
Anyway, I am impressed by this tool.