Skip to main content

Migrations

https://img.shields.io/pypi/v/migrations.svg?maxAge=2592000

Simple, database-agnostic migration tool for Python applications. Inspired by node migrations.

Status

The project is in beta now. Bugs and breaking changes may occur.

Features

  • No specific database requirements, use it for anything you call database.

  • Pretty simple, just generate migration script and define self-explanatory up() and down() functions there.

  • Use imports in your migration scripts to load database bindings. Talk to the database the same way your application does.

  • Stores the sequence of already performed migrations. If the sequence does not match scripts in migrations directory (e.g. after merge), aborts and warns user.

  • TBD: Deeply configurable, including resources acquiring and releasing.

Requirements

Only Python 3 is supported for now.

Installation

$ pip install migrations

Notice, this distribution provides package and executable script named migrate, so check if it does not mess with existing packages/scripts. Generally, you should neither install this tool globally, nor install several migration tools for one project.

Usage

usage: migrate [options] [action]

actions:
  up     [-h] [NAME|COUNT]   (default) perform COUNT migrations or till
                             given NAME (by default perform all available)
  down   [-h] [NAME|COUNT]   revert COUNT migrations or till
                             given NAME (by default revert one)
  create [-h]  NAME          create new migration file

  show   [-h]                print all migrations in chronological order

options:
  -h, --help                 show this help message and exit
  -v, --version              show version and exit
  -d PATH, --migrations-dir PATH
                             directory where migrations are stored
  -s PATH, --state-file PATH
                             location of file which stores database state
  -t PATH, --template-file PATH
                             location of template file for new migrations

Each migration file must define functions up() and down() without required arguments.

Simple migration example:

import redis

db = redis.Redis(host='localhost', port=6379)

def up():
    db.rpush('used_libraries', 'migrations')

def down():
    db.rpop('used_libraries', 'migrations')

Current working directory is prepended to sys.path, so any import statement in migration file tries to find requested module in working directory at first. You can use this to manage database access for your both app and migrations with single piece of code. See an example. Let’s assume that in working directory we have module named db, which contains singleton object responsible for DB connection, for example PyMySQL Connection object.

from db import connection

def manage_cursor(action):
    def wrap():
        with connection.cursor() as cursor:
            action(cursor)
        connection.commit()
    return wrap

@manage_cursor
def up(cursor):
    cursor.execute(
        "INSERT INTO used_libraries (`name`) VALUES ('migrations')"
    )

@manage_cursor
def down(cursor):
    cursor.execute(
        "DELETE FROM used_libraries WHERE `name`='migrations'"
    )

Metadata

Release files for migrations 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for migrations 0.1.1
File Size Uploaded Provenance Actions
migrations-0.1.1.tar.gz 6.2 kB Without provenance Details for migrations-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for migrations 0.1.1
File Interpreter ABI Platform Actions
migrations-0.1.1-py3-none-any.whl Python 3 none any Details for migrations-0.1.1-py3-none-any.whl

Total release size: 15.4 kB

Release files / migrations-0.1.1.tar.gz

Download URL migrations-0.1.1.tar.gz
Size 6.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f4ed223ffa2f6ed8df50b5058c49506ef34db30c81b2574be1d22b38a7f8c8ea
BLAKE2b-256 checksum
How to use checksums
1a2050022571c949dee64a8d0d2ef0e8d15c358cc9da6261d9819f07f16a726a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / migrations-0.1.1-py3-none-any.whl

Download URL migrations-0.1.1-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc416fb8c608891ff2d9a48b221f542eb01d26469225aba86bf0641d331d4143
BLAKE2b-256 checksum
How to use checksums
c28de165b6386736a1765f1a524e85a04d6b4f5edcee318f684f9aaaecf3060a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for migrations 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page