Migrations And Reflection¶
This guide shows how to compare registered model metadata with live database metadata.
What The Example Covers¶
db.migrations.snapshot();db.migrations.live_snapshot();- diff generation;
- dry-run SQL;
- basic inspector calls.
"""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())
Run it locally:
python examples/migrations_reflection.py
Review Workflow¶
For application migrations, generate a migration artifact, review the SQL, run it in staging, and only then apply it in production. Ormdantic records applied revisions in the migration history table.