Skip to content

Library API

db2md exposes a small async API.

import asyncio
from db2md import list_databases, generate_schema_markdown, export_schemas

URL = "postgresql+asyncpg://user:pass@localhost:5432/postgres"

async def main() -> None:
    dbs = await list_databases(URL)
    name, table_count, md = await generate_schema_markdown(URL, "myapp")
    paths = await export_schemas(URL, "schemas")
    print(dbs, name, table_count, paths)

asyncio.run(main())

Public functions

list_databases

async def list_databases(url: str, *, include_system: bool = False) -> list[str]

List database names reachable from url (dialect-aware). System catalogs are skipped unless include_system=True.

generate_schema_markdown

async def generate_schema_markdown(
    url: str,
    database: str,
    *,
    schema: str | None = None,
    er_style: ErStyle = "compat",
) -> tuple[str, int, str]

Introspect one database and return (resolved_name, table_count, markdown).

schema defaults depend on the dialect (public for PostgreSQL, current catalog for MySQL, ignored for SQLite).

er_style is one of ER_STYLEScompat, optional, minimal — see Output format.

export_schemas

async def export_schemas(
    url: str,
    output: str | Path = "schemas",
    *,
    databases: list[str] | None = None,
    schema: str | None = None,
    include_system: bool = False,
    er_style: ErStyle = "compat",
) -> list[Path]

Discover databases (unless databases is set) and write one Markdown file each. Returns the list of written paths.

Progress and per-database failures are logged via the standard logging module (db2md.api).

Models

Type Role
ColumnInfo Column name, type, nullability, default, PK, comment
ForeignKeyInfo Constrained/referred columns, name, ON DELETE
IndexInfo Name, columns, uniqueness
CheckConstraintInfo Name + SQL text
TableInfo Table metadata aggregating the above

All models are frozen dataclasses (slots=True).

Version

from db2md import __version__