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.13.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pogo_migrate-0.0.13.tar.gz
Algorithm Hash digest
SHA256 00b22e33480bd3450d03a482a3de80682c0a9b544bbb5eed5e28724b7975f443
MD5 bdbed761fc5090b6dc6a8311ee2a7f0b
BLAKE2b-256 a18ed6174d3c7ee7c106819bef393e921b981818835f6978bb65c875b75c444b

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: pogo_migrate-0.0.13-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.9 Linux/6.5.0-1017-azure

File hashes

Hashes for pogo_migrate-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 511d8a7b315ae44edbf3ad18c533f16caf0621657496c518468bbbd4e324b44f
MD5 f748622861c2bb18000d96a4f8825e74
BLAKE2b-256 c21898579de2bf7d0afff17944ece42d5c6b1342bedc0c732dcd4a7bf108e5dc

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