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.2.tar.gz (176.9 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.2-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: delembic-0.4.2.tar.gz
  • Upload date:
  • Size: 176.9 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.2.tar.gz
Algorithm Hash digest
SHA256 b9acd0e4bbfe53a2da698f0cdb6f15c7c27344dc505c6e3bc98543e893c1fadb
MD5 450a7ea1dca07eb1d0e02080936e78d6
BLAKE2b-256 d04a515c31b290d85b404c2362642a2d7c091ac76c09bd7fdea7dcde913e7e75

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: delembic-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 11.9 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1aab9d2598694acbabfbd6622f7c93aaa1f231fb6ae0bef27a1d8a78ebc70765
MD5 d863289f591e3ab552fece2776dffe00
BLAKE2b-256 f713d1c8e29867b84410a7e217f1b183ca2a5a51e7d33547bbb52c3ad630e696

See more details on using hashes here.

Provenance

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