Skip to main content

asyncpg-trek: simple migrations for asyncpg

A simple library for managing migrations.

Target audience

Me. But maybe if you use [asyncpg] and prefer to write migrations as raw SQL (i.e. you're not using SQLAlchemy/Alembic) then you as well.

Features

  • async: migrations usually don't benefit from being async, but you benefit from using the same database driver in as your application uses (only [asyncpg] is supported).
  • simple: you just create .sql or Python files in a folder of your choosing and point this tool at that folder. No need to fight a new API to write migrations in.
  • API centric: there is no CLI to figure out, you decide how migrations get called, you control how the database connection gets created. This makes it trivial to run migrations in tests, wrap them in a CLI or run them via an exposed HTTP endpoint.
  • declarative: just specify the version you want and the library figures out if it needs an upgrade, downgrade or no action.

Example usage

from pathlib import Path

import asyncpg
from asyncpg_trek import plan, execute, Direction
from asyncpg_trek.asyncpg import AsyncpgBackend

MIGRATIONS_DIR = Path(__file__).parent / "migrations"

async def migrate(
    conn: asyncpg.Connection,
    target_revision: str,
) -> None:
    backend = AsyncpgBackend(conn)
    async with backend.connect() as conn:
        planned = await plan(conn, backend, MIGRATIONS_DIR, target_revision=target_revision, direction=Direction.up)
        await execute(conn, backend, planned)

You could make this an entrypoint in a docker image, an admin endpoint in your API or a helper function in your tests (or all of the above). How you run your migrations depends on the complexity of your system. For example, for simple systems it may be easy to run migrations on app startup based on a hardcoded revision. For more complex systems you may want to run migrations manually or via an admin API.

See this release on GitHub: v0.3.0

Download files

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

Source Distribution

asyncpg_trek-0.3.0.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asyncpg_trek-0.3.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file asyncpg_trek-0.3.0.tar.gz.

File metadata

  • Download URL: asyncpg_trek-0.3.0.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.1 Linux/5.15.0-1024-azure

File hashes

Hashes for asyncpg_trek-0.3.0.tar.gz
Algorithm Hash digest
SHA256 3500a865173e892b7a9d368ca0768b34f6465591e7a887d29202e147697ff9d1
MD5 7da408a1f554e44033692ba66ad5b3cc
BLAKE2b-256 69f7ced4ac9c1a2f84879bc32c9a7167285c328734f32310ad869ca8ace45779

See more details on using hashes here.

File details

Details for the file asyncpg_trek-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: asyncpg_trek-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.1 Linux/5.15.0-1024-azure

File hashes

Hashes for asyncpg_trek-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a21449063f8efaf6c15c8efc995b4ed19820b7f5dd195a5fb4c0d9488d65e650
MD5 9cdef0e32d83f202eb9865ac7ce7c7ec
BLAKE2b-256 6e3458c68adad19a8a113a300a87875218211b557fa0d1bd685ad4fc02f59d64

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page