Skip to content

Migrations And Reflection

The migration facade can execute SQL plans and store applied revisions. The inspector exposes runtime metadata for supported dialects.

"""Migration and reflection example."""

import asyncio
from uuid import uuid4

from pydantic import BaseModel

from ormdantic import Ormdantic
from ormdantic.migrations import MigrationOperation, MigrationPlan

db = Ormdantic("sqlite:///examples_migrations_reflection.sqlite3")


@db.table(pk="id")
class Flavor(BaseModel):
    id: str
    name: str


async def main() -> None:
    await db.init()

    inspector = db.inspect()
    print(await inspector.table_names())
    print(await inspector.columns("flavor"))

    revision = f"example-{uuid4()}"
    await db.migrations.apply(
        revision,
        MigrationPlan(
            [MigrationOperation("CREATE TABLE IF NOT EXISTS extra (id TEXT)")]
        ),
    )
    assert revision in await db.migrations.applied_revisions()


if __name__ == "__main__":
    asyncio.run(main())