Tern🐧 - MySQL Versioning for Python
This project is a database migration tool that helps manage and apply database schema changes. It uses a JSON file to define the changes and applies them to a MySQL database. It is named after a bird called Arctic Tern which can migrate the longest distance. Yearly migration can range from 44,000 miles to 59,000 miles.
Files
changes.json
: Contains the list of database changes to be applied.connection.py
: Manages the database connection pool.main.py
: Entry point for running the migration scripts.Makefile
: Contains commands to run the project.migration.py
: Contains functions to process migrations, calculate checksums, and insert data into the database.requirement.txt
: Lists the Python dependencies for the project.venv/
: Virtual environment directory.
Setup
-
Create a Virtual Environment:
python -m venv venv
-
Activate the Virtual Environment:
- On Windows:
.\venv\Scripts\activate
- On macOS/Linux:
source venv/bin/activate
-
Install Dependencies:
pip install -r requirement.txt
Usage
Running Migrations
To run the migrations, use the main.py script with the appropriate arguments.
Makefile
You can also use the Makefile to run the project:
- Run the Project:
make run
Code Overview
- Entry point for the migration tool.
- Parses command-line arguments to determine whether to migrate up or down.
- Calls the appropriate functions from migration.py to process the migrations.
{
"changeSet": [
{
"id": "1",
"author": "John Doe",
"description": "Initial version",
"date": "2019-01-01",
"comment": "Initial version",
"migrateUp": "CREATE TABLE my_table (id INT PRIMARY KEY, name VARCHAR(255));",
"migrateDown": "DROP TABLE my_table;"
},
{
"id": "2",
"author": "John Doe",
"description": "Add column",
"date": "2019-01-02",
"comment": "Add column",
"migrateUp": "ALTER TABLE my_table ADD COLUMN age INT;",
"migrateDown": "ALTER TABLE my_table DROP COLUMN age;"
}
]
}