Skip to main content

Interactive ERD visualization for SQLAlchemy 2.0 models

Project description

erdalchemy

Interactive ERD visualizer for SQLAlchemy 2.0 models. Introspects your DeclarativeBase metadata and generates diagram files with no manual configuration required.

  • Drag-and-drop interactive HTML output
  • Two layout algorithms: force-directed (general) and star (optimized for star/warehouse schemas)
  • Hover highlighting for tables and relationships
  • Export to HTML, SVG, PNG, and PDF
  • Built-in color themes and per-table color overrides
  • Multi-schema support with visual grouping and cross-schema FKs
  • Zero dependencies beyond SQLAlchemy

preview

Installation

pip install erdalchemy

PNG and PDF export require an optional dependency:

pip install "erdalchemy[all]"

Quick start

from sqlalchemy_erd import generate_erd
from myapp.models import Base

generate_erd(Base, output="erd.html")

CLI

# Interactive HTML (default)
sqlalchemy-erd myapp.models:Base

# Specific format and output path
sqlalchemy-erd myapp.models:Base --format svg --output erd.svg

# With theme and custom title
sqlalchemy-erd myapp.models:Base --format png --theme blue --title "My Schema"

# Per-table color overrides as JSON
sqlalchemy-erd myapp.models:Base --colors '{"users": "#1d4ed8", "orders": "#059669"}'

# High-resolution PNG
sqlalchemy-erd myapp.models:Base --format png --scale 3

# Only include specific database schemas
sqlalchemy-erd myapp.models:Base --schemas public,billing,audit

# Tune layout parameters
sqlalchemy-erd myapp.models:Base --k-repulse 50000 --k-attract 0.05 --ideal-len 350

# Use star layout for star/warehouse schemas or disconnected tables
sqlalchemy-erd myapp.models:Base --layout star

# Custom header color via hex
sqlalchemy-erd myapp.models:Base --theme "#6d28d9"

Python API

from sqlalchemy_erd import generate_erd
from myapp.models import Base

generate_erd(Base, output="erd.html", format="html")
generate_erd(Base, output="erd.svg",  format="svg")
generate_erd(Base, output="erd.png",  format="png", scale=2)   # requires cairosvg
generate_erd(Base, output="erd.pdf",  format="pdf")             # requires cairosvg

# Only include specific database schemas
generate_erd(Base, output="erd.html", schemas=["public", "billing", "audit"])

# Tune layout parameters
generate_erd(Base, output="erd.html", k_repulse=50000, k_attract=0.05, ideal_len=350)

# Use star layout for star/warehouse schemas or disconnected tables
generate_erd(Base, output="erd.svg", format="svg", layout="star")

Layout algorithms

Force-directed (default)

General-purpose physics-based layout. Works well for most schemas with connected tables.

generate_erd(Base, output="erd.html", layout="force")

Star

Deterministic column-based layout optimized for star/snowflake schemas and disconnected tables. Produces clean, readable diagrams without arrow crossings for ETL/data warehouse patterns.

generate_erd(Base, output="erd.html", layout="star")

The algorithm:

  1. Fact tables (most FK columns) are placed in the center
  2. Catalog tables (FK targets) are split into left and right columns, ordered by FK column position
  3. Disconnected tables (no FK edges) are arranged in a grid below

When there are multiple fact tables, catalogs are placed above and fact tables side by side below.

Themes

Eight built-in themes: default, blue, green, dark, rose, yellow, pink, navy.

Preview images for each theme are available in examples/themes/.

generate_erd(Base, theme="dark")
generate_erd(Base, theme="pink")
generate_erd(Base, theme="navy")

You can also pass a hex color string to set a custom header color:

generate_erd(Base, theme="#6d28d9")

Per-table color overrides let you assign any hex color to individual tables while keeping the rest of the theme intact:

generate_erd(
    Base,
    theme="default",
    table_colors={
        "users":    "#1e40af",
        "orders":   "#065f46",
        "products": "#9f1239",
    },
)

Force-directed layout tuning

The force-directed layout (layout="force") can be customized via four parameters:

Parameter Default Description
k_repulse 35000 Repulsion strength between all nodes. Increase to spread tables further apart.
k_attract 0.1 Attraction strength between connected nodes. Higher values pull FK-related tables closer.
k_align 0.02 Horizontal-alignment force. Pushes connected tables to the same Y, favoring side-by-side placement.
ideal_len 280 Target edge length (px) between connected tables.

Supported column types

SQLAlchemy type Badge
Primary key PK
Foreign key FK
String string
Text text
Integer / BigInteger / SmallInteger int / bigint / smallint
Float / Numeric float / numeric
Date date
DateTime datetime
Time time
Boolean bool
JSON / JSONB json
Uuid uuid
Enum enum
ARRAY array
Interval interval
LargeBinary binary
TypeDecorator resolves to underlying impl type

Nullable columns display a ? suffix (e.g. text?, date?).

Relationship types

Cardinality Line style
1:N Solid with arrow
N:N Dashed with arrow
Cross-schema FK Dashed with longer gaps

Examples

See the examples/ directory:

License

MIT

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

erdalchemy-0.3.0.tar.gz (868.6 kB view details)

Uploaded Source

Built Distribution

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

erdalchemy-0.3.0-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: erdalchemy-0.3.0.tar.gz
  • Upload date:
  • Size: 868.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for erdalchemy-0.3.0.tar.gz
Algorithm Hash digest
SHA256 5be4b39611004546bb23a991c1d78f09db312f02ab2f569cfd99a077b2b4f688
MD5 5bef0b397e7dce7d78a78e5cbd5321cc
BLAKE2b-256 51289f6f73c12766d0f91c50529411c9e087f28bb90f8d0a875379ff4b89be12

See more details on using hashes here.

File details

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

File metadata

  • Download URL: erdalchemy-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for erdalchemy-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 51907cf0cc1a6aafce40e098758236010cbeb90ab7fe16511f64dcd37aa9339b
MD5 1b38fc7ba2da671f4c04575a08e8dd84
BLAKE2b-256 c84ba922eca030bedd81be3df404df63f4856d34a91621d779d318efb46ff2e4

See more details on using hashes here.

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