Migrations: Sync Runner

Run SQLSpec’s SyncMigrationCommands against bundled demo migrations.

uv run python docs/examples/patterns/migrations/runner_basic.py

Source

 1"""Minimal migration workflow powered by SyncMigrationCommands."""
 2
 3from pathlib import Path
 4
 5from sqlspec.adapters.sqlite import SqliteConfig
 6from sqlspec.migrations.commands import SyncMigrationCommands
 7
 8__all__ = ("main",)
 9
10
11MIGRATIONS_PATH = Path(__file__).with_name("files")
12
13
14def _config() -> "SqliteConfig":
15    """Return a SQLite config pointing at the bundled migration files."""
16    return SqliteConfig(
17        pool_config={"database": ":memory:"}, migration_config={"script_location": str(MIGRATIONS_PATH)}
18    )
19
20
21def main() -> None:
22    """Apply the demo migration, show row counts, and roll back."""
23    config = _config()
24    commands = SyncMigrationCommands(config)
25    commands.upgrade()
26    with config.provide_session() as session:
27        rows = session.select("SELECT COUNT(*) AS total FROM articles")
28        total = rows[0]["total"] if rows else 0
29        print({"articles": total})
30    commands.downgrade()
31
32
33if __name__ == "__main__":
34    main()