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()