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¶
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_STYLES — compat, 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).