|Keywords||migrations sqlite3 database development verson-control|
Migrations are a type of version control for databases, used to keep track of the changes made, and to provide easy maintainability. In case something goes wrong, ‘rollback’ can be run and it will revert the database to the previous state.
A migration consist in a Python script (preferably named by datetime of creation) placed in the migrations directory. The script should contain an import and a class called Migration which implements BaseMigration.
from limigrations.migration import BaseMigration class Migration(BaseMigration): def up(self, conn, c): pass def down(self, conn, c): pass
There is an example here.
Install the package with
$ pip install limigrations
or clone this repository and install
$ git clone email@example.com:dragosthealex/limigrations.git $ python setup.py install
1. In your project create a directory for migrations
$ mkdir my-migrations
2. Decide on a name for your database e.g. my-database.db
$ touch my-database.db
3. Create your first migration using the command-line, then edit the
$ python -m limigrations new --new_migration "users_table" --migrations_dir "my-migrations"
Optionally, you can copy the example
and modifying the
down methods, saving it in your migrations directory.
It’s recommended to name it after the date and time e.g. 2017-03-08_12:31
$ python -m limigrations migrate --db_file "my-database.db" --migrations_dir "my-migrations"
5a. Done! You should now see the changes written in the
up method being applied.
6a. If something goes wrong and you want to revert, run
$ python -m limigrations rollback --db_file "my-database.db" --migrations_dir "my-migrations"
7a. You should see the changes written in the
down method being applied.
The following options can be used:
$ python -m limigrations -h usage: limigrations.py [-h] [-d DB_FILE] [-m MIGRATIONS_DIR] [-v] action positional arguments: action Action to take, can be 'migrate' or 'rollback' optional arguments: -h, --help show this help message and exit -d DB_FILE, --db_file DB_FILE Path to the database file. -m MIGRATIONS_DIR, --migrations_dir MIGRATIONS_DIR Path to the migrations directory. -v, --verbose Verbose
4b. Import the limigrations module and run the migrations
from limigrations import limigrations limigrations.migrate('my-database.db', 'my-migrations')
5a. If you want to rollback later, run the rollback
6a. If you just want to connect to the database
conn, c = limigrations.connect_database('my-database.db')
After cloning the repository, run
python -m unittest -v tests.test_limigrations
There are two tests, one for
migrate and one for
They create a test migration at runtime, defining the
and then call the tested functions. The tests should leave no trace, as the
directories and files are deleted after completion.
If you’d like to have a development environment, you should create a virtualenv and then do pip install -e . from within the directory.
This project is licensed under the MIT License - see the LICENSE.md file for details.