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.3.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.3.0-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: delembic-0.3.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.3.0.tar.gz
Algorithm Hash digest
SHA256 f75f5880da5310aefada0675a841fde201f2bc4b78de98470b2fa313422cf674
MD5 872b6bd901524626ba131e13b7c40e26
BLAKE2b-256 12c9585afe65ebe3f1e92df332a2218b418e3e34fdf40b135a21a9b575b0c8ba

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: delembic-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 10.4 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1ecb0a9107777b4a4f3c03e725cf578437b9f4e882d78409227aadb7cff202ea
MD5 001e2d2900814b6ac9bbb1aaac9213aa
BLAKE2b-256 c57f30bb594648be2beca382d0bc7d9c7fe5fff43d53a18eb8ff39b12766525d

See more details on using hashes here.

Provenance

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