Skip to main content

Compare Database Schemas

Project description

comdab — Compare Database Schemas

PyPI - Python Version PyPI - Version GitHub Actions Workflow Status Read the Docs PyPI - Types

comdab allows you to compare in depth two database schemas to find all differences: missing columns, different nullabilities or defaults, slight changes in function or triggers definitions...

[!WARNING]

comdab is still in development, only tested with PostgreSQL 14 to date.

All feedback and contributions are welcome!

Installation

Use pip to install comdab:

pip install comdab

Requirements

Goals

comdab is especially useful in combination with a migration tool like Alembic, to make sure that applying a migration to an existing database and creating a new database from scratch produce the exact same schema.

Indeed, while migration tools can auto-detect model changes and write automatically the migrations to apply to pre-existing databases, it does not cover the whole schema complexity, and does not prevent human errors (like modifying the model without re-generating migrations, or manually editing migrations in a slightly wrong way...)

This may cause dangerous and hard to spot bugs, especially if your unit tests and CI run on a fresh database created from the Python-written model, and not on pre-existing databases with the new migration applied.

By running comdab, you can ensure the two are the nearly-exact same.

comdab stands on the shoulders of the SQLAlchemy library, used to connect to the database and for most of schema introspection.

Usage

from comdab import compare_databases
from sqlalchemy import create_engine

engine_1 = create_engine("postgresql://user:pass@host/foo")
engine_2 = create_engine("postgresql://user:pass@host/bar")

with engine_1.connect() as left_conn, engine_2.connect() as right_conn:
    reports = compare_databases(left_conn, right_conn)

if reports:
    print("❌ Database schemas are different:", reports)
else:
    print("✅ Database schemas are the same!")

See documentation for configuration and other details.

Contributing

Issues and pull requests are welcome!

License

This work is shared under the MIT license.

@ 2025 Loïc Simon (loic.simon@espci.org)

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

comdab-0.3.0.tar.gz (58.6 kB view details)

Uploaded Source

Built Distribution

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

comdab-0.3.0-py3-none-any.whl (27.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: comdab-0.3.0.tar.gz
  • Upload date:
  • Size: 58.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for comdab-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c1cd8218a494f734febc3e7ca0ae20904d8cb74e75aead9a806d3f1fcd9f0ff4
MD5 3854dae52758b3b5328ddde67645f8fb
BLAKE2b-256 763b277fcd34a8f84c4a720dc26854de0a8fbd3b6a0149b3b5e596a4cc80a1df

See more details on using hashes here.

Provenance

The following attestation bundles were made for comdab-0.3.0.tar.gz:

Publisher: release.yml on loic-simon/comdab

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

File details

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

File metadata

  • Download URL: comdab-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 27.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for comdab-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5cb781ebe2edd041d61c0dd332936124e86c5ec0c7a58d729a9c0a40418baf9d
MD5 66f2360e7de8fee9a9c7c15b1dc0a67c
BLAKE2b-256 8bd50b768408675be91de4679c2e18d9514529bfbf69526f0d29314f45404431

See more details on using hashes here.

Provenance

The following attestation bundles were made for comdab-0.3.0-py3-none-any.whl:

Publisher: release.yml on loic-simon/comdab

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