As an active Python developer I find it rather tedious to continuously deploy production database changes and having the application down for an extended time because I'm running database migrations through imports. What's really bad is that there may be many imports because several developers have checked in their needed migrations as well.
Then there's the dreaded roll back. Better have that db dump you created before the deployment.
Ruby on Rails however solved this with ActiveRecord::Migration. With this you just simply run rake db:migrate and boom your database is brought up to where it needs to be. Need to roll back run the command again with the pre-deploy version and it gets done. All the migrations needed and with one command.
PyMigrate can be used in two ways: stand-alone; inclusion in an application. In either case all that is needed in an initial configuration dictionary, a version to run to and the environment to run in.
When PyMigrate runs it will attempt to find a database table called schema_info. If this is not found then one will be created and the default version number will be 0. If one is found the version will be recorded and compared to any/none versions you pass in to run against.
Depending on the version of the database and the version you wish to migrate to PyMigrate will run either the up or down sections of the appropriate migration files in order to bring the database into your desired standards.
What is a migration manager that doesn't allow the use of native code? Yes PyMigrate will allow you to run native and your Python code as needed. One of the command blocks is code: to allow you to do that. Now, if need be you can create synching classes and code as you see fit.