Skip to main content

Database migration tool for asyncpg

Project description

Pogo migrate - asyncpg migration tooling

image image image style tests codecov

pogo-migrate assists with maintaining your database schema (and data if required) as it evolves. Pogo supports migrations written in raw sql, as well as python files (useful when data needs to be migrated).

A migration can be as simple as:

-- a descriptive message
-- depends: 20210101_01_abcdef-previous-migration

-- migrate: apply
CREATE TABLE foo (id INT, bar VARCHAR(20), PRIMARY KEY (id));

-- migrate: rollback
DROP TABLE foo;

Pogo manages these migration scripts and provides command line tools to apply, rollback and show migration history.

Configuration

Add pogo to pyproject.toml

[tool.pogo]
migrations_location = "./migrations"
database_config = "{POSTGRES_DSN}"

If you have an existing environment with separate configuration values for postgres, you can build the DSN in config.

[tool.pogo]
migrations_location = "./migrations"
database_config = "postgres://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{PORTGRES_DATABASE}"

New migrations

To create a new migration use pogo new. This will template out the migration file and open the file in your configured text editor (vi by default).

Supported flags:

  • --sql generate a sql migration (defaults to .py)
  • --no-interactive skip the editor step and just write the migration template to the migrations directory.
$ pogo new -m "a descriptive message"

Testing

To assist in testing, pogo-migrate provides the pogo_migrate.testing module. The apply/rollback methods in the testing module will pick up your configuration and connect to the configured test database based on environment variables, or you can provide a database connection directly.

import asyncpg
import pogo_migrate.testing

@pytest.fixture(scope="session")
async def _engine(config):  # noqa: PT005
    db = await asyncpg.connect(config.my_postgres_dsn)

    await pogo_migrate.testing.apply(db)

    yield

    await pogo_migrate.testing.rollback(db)

Alternatively add pytest-pogo to your test dependencies and use the provided fixture pogo_engine which will apply and rollback your migrations for your test session, like the above example.

Thanks and Credit

Inspiration for this tool is drawn from yoyo and dbmate.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pogo_migrate-0.0.11.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

pogo_migrate-0.0.11-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file pogo_migrate-0.0.11.tar.gz.

File metadata

  • Download URL: pogo_migrate-0.0.11.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.5.0-1016-azure

File hashes

Hashes for pogo_migrate-0.0.11.tar.gz
Algorithm Hash digest
SHA256 672b4232660d79a0210e3efec347395baa9057af46cb234a7af0a23817727dee
MD5 a40b3f0dd02ed26f54eb087c2cf6038f
BLAKE2b-256 843921c8c42f5098612a1d6166af8b15cb618acde59ec165f293fd231133a515

See more details on using hashes here.

Provenance

File details

Details for the file pogo_migrate-0.0.11-py3-none-any.whl.

File metadata

  • Download URL: pogo_migrate-0.0.11-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.5.0-1016-azure

File hashes

Hashes for pogo_migrate-0.0.11-py3-none-any.whl
Algorithm Hash digest
SHA256 a0f385966b956ade6bc79fcc58a51a032f2c2c690943f45ab1d69b17dc099f06
MD5 b9b2f415a261dcb087834104f21cec3c
BLAKE2b-256 4c4151f8d0d6c9d3fc940bccd8facdcda6fbc6330824d01a6bec1e3146cb4528

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page