Liquibase's almost compatible tool that works very similary, but just using only Python code.
To use at a MySQL database:
$ pip install basemigrator[mysql]
To use at a PostgreSQL database:
$ pip install basemigrator[postgresql]
There's basicly two rules to use this tool:
- The changelog file MUST in the same folder as the migrations
- The changelog file MUST follow the expected format specified in the documentation
- The migration SQL file MUST have a set of metadata to be applied properly
About the first rule, it's simple, follow this folder structure and you will be fine:
migrations/
├── changelog.xml
├── Table1
│ └── Table1-createtable.sql
└── Table2
└── Table2-createtable.sql
The second rule applies for the changelog file format, which depending on her extension, MUST be one of these two:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog>
<include file="Table1/Table1-createtable.sql" relativeToChangelogFile="true" />
<include file="Table2/Table2-createtable.sql" relativeToChangelogFile="dev, prod" />
</databaseChangeLog>
- file: Table1/Table1-createtable.sql
- file: Table2/Table2-createtable.sql
context: dev, prod
The third rule specifies that the migration must have a set of metadata, which are:
--liquibase formatted sql
--changeset <author>:<migration-id>
CREATE TABLE Table1();
The configuration object passed as a parameter for the function that will execute the migrations should have a field named config
that at least
implements the __get__()
method and have the following key-values:
class App:
def __init__(self):
self.config = {
'DB_USER': 'user', # the database user
'DB_PASSWORD': 'password', # the database password
'DB_HOST': 'localhost', # the database host
'DB_DATABASE': 'foo', # the database name
'DB_ENGINE': 'MYSQL' # the database engine used, default to MySQL
}
To call the migrate()
function, three parameters must be given, they are:
from basemigrator import migrate
migrate(
app=app, # the app configuration object
changelog='/path/to/migrations', # the full path of the migrations folder
context='dev' # the context which the migrations will be applied
)
- MySQL
- PostgreSQL
Currently, procedures create statements are not supported.
- CI/CD
- code linting
- publish package to pypi
- Contributing section
- tests/