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.2.0.tar.gz (175.3 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.2.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for delembic-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ea90496e783c6a438fe03cb29e677e0af7a3db230f7d6dcdbdaed6bbf7c6517b
MD5 6c6f00195d39c99cbcb06038431f772a
BLAKE2b-256 b1ae76960bcf04bde0979a1ad5c9884eb930f1bf91bb7ccf829dd191591a7281

See more details on using hashes here.

Provenance

The following attestation bundles were made for delembic-0.2.0.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.2.0-py3-none-any.whl.

File metadata

  • Download URL: delembic-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e97ef5a324c65417c7dd9d6673f28f32e9f39c0dea55b8715ba9312d7f6bd2a
MD5 8e54192112363c04cbed41bc945eaa9a
BLAKE2b-256 021abd824d3d902a25293d0d0e10d33e62762c86d0a350ee1a2258fa71cd199d

See more details on using hashes here.

Provenance

The following attestation bundles were made for delembic-0.2.0-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