Skip to main content

Data migration framework for versioning ETL and data operations alongside Alembic

Project description

Delembic

Data migration framework for Python — Alembic for ETL and data operations.

Alembic versions schema changes. Delembic versions data changes: vocabulary loads, ETL runs, reference data inserts, corrections. Together they describe the complete database state.

Installation

pip install delembic

Quick Start

# 1. Initialize in your project
delembic init

# 2. Edit delembic.ini — set your database URL
# sqlalchemy.url = postgresql+psycopg://user:pass@host/dbname

# 3. Create a migration
delembic revision -m "load vocabulary"

# 4. Fill in the generated file, then run
delembic upgrade head

Configuration

delembic init creates:

your-project/
├── delembic.ini          # config — commit this
└── delembic/
    ├── env.py            # optional connection helpers
    └── versions/         # migration files live here

delembic.ini:

[delembic]
script_location = delembic
sqlalchemy.url = postgresql+psycopg://user:pass@localhost/mydb
alembic_config = alembic.ini

You can name the script folder anything:

delembic init data-migrations

Writing Migrations

from delembic import DataMigration

class LoadVocabulary(DataMigration):

    revision = "D001"
    depends_on = []
    description = "Load OMOP vocabulary tables"

    def upgrade(self, conn):
        conn.execute(...)

    def validate(self, conn):
        count = conn.execute("SELECT COUNT(*) FROM concept").scalar()
        assert count > 0, "vocabulary load produced no rows"

conn is a SQLAlchemy Connection. validate is optional — migration is marked failed if it raises.

Dependency Tracking

Migrations declare explicit dependencies. Delembic builds a DAG and runs them in topological order.

class LoadPerson(DataMigration):
    revision = "D002"
    depends_on = ["D001"]   # waits for D001

Alembic Integration

Point alembic_config at your alembic.ini:

[delembic]
alembic_config = alembic.ini

When you create a migration, Delembic automatically captures the current Alembic head:

delembic revision -m "load person"
# → depends_on = ['3d1e3e6abc12']   (current alembic head)

At upgrade time, Delembic verifies the required Alembic revision has been applied before running:

BLOCKED: Migration D002 requires Alembic revision(s) 3d1e3e6abc12 to be applied first.
Run 'alembic upgrade head' before retrying.

CLI Reference

Command Description
delembic init [DIR] Initialize project. DIR defaults to delembic
delembic revision -m "msg" Generate new migration file
delembic upgrade head Run all pending migrations
delembic upgrade D003 Run migrations up to D003
delembic current Show last applied revision
delembic history List all migrations with status

Metadata Tables

Delembic creates two tables:

delembic_version       -- current status per revision
delembic_run_history   -- full audit log (start/end time, duration, exception, user, host)

Failed migration work is rolled back. The failure record is always committed — audit trail survives transaction failures.

Development

pip install -e ".[dev]"
pytest

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

delembic-0.4.1.tar.gz (176.8 kB view details)

Uploaded Source

Built Distribution

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

delembic-0.4.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file delembic-0.4.1.tar.gz.

File metadata

  • Download URL: delembic-0.4.1.tar.gz
  • Upload date:
  • Size: 176.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for delembic-0.4.1.tar.gz
Algorithm Hash digest
SHA256 0e790cdb6517754c85312b6fb71a66dc801c8195fdd46772ce8a39df05ed32db
MD5 260bc6dd15da25f0adff523240d1190a
BLAKE2b-256 871a251bfe5c076a1d3d2ef9b18c6c1dd3469675dfd83c7431051fc987512fb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for delembic-0.4.1.tar.gz:

Publisher: release.yml on pradhanhitesh/delembic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file delembic-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: delembic-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for delembic-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 273accf6226b31f66cacda60a0db33f53fb8f01da0d78d59d65fc76ffa6cfac3
MD5 1007c77d37c32d8912c1f38f3a9aae2d
BLAKE2b-256 f806f1b17349ed798b9faeb37cad0f8b88e6c7a2ef1b05c4b5b22bc7d4157f64

See more details on using hashes here.

Provenance

The following attestation bundles were made for delembic-0.4.1-py3-none-any.whl:

Publisher: release.yml on pradhanhitesh/delembic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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