Multi-Adapter Registry

Demonstrates registering multiple adapters (sync + async) on a single SQLSpec instance.

uv run python docs/examples/patterns/configs/multi_adapter_registry.py

Source

 1"""Show how to register multiple adapters on a single SQLSpec instance."""
 2
 3from sqlspec import SQLSpec
 4from sqlspec.adapters.aiosqlite import AiosqliteConfig
 5from sqlspec.adapters.asyncpg import AsyncpgConfig, AsyncpgPoolConfig
 6from sqlspec.adapters.duckdb import DuckDBConfig
 7from sqlspec.adapters.sqlite import SqliteConfig
 8
 9__all__ = ("build_registry", "main")
10
11
12def build_registry() -> "SQLSpec":
13    """Create a registry with both sync and async adapters."""
14    registry = SQLSpec()
15    registry.add_config(SqliteConfig(bind_key="sync_sqlite", pool_config={"database": ":memory:"}))
16    registry.add_config(AiosqliteConfig(bind_key="async_sqlite", pool_config={"database": ":memory:"}))
17    registry.add_config(DuckDBConfig(bind_key="duckdb_docs", pool_config={"database": ":memory:docs_duck"}))
18    registry.add_config(
19        AsyncpgConfig(
20            bind_key="asyncpg_docs", pool_config=AsyncpgPoolConfig(dsn="postgresql://user:pass@localhost:5432/db")
21        )
22    )
23    return registry
24
25
26def main() -> None:
27    """Print summary of configured adapters and bind keys."""
28    registry = build_registry()
29    {
30        "configs": [cfg.__class__.__name__ for cfg in registry.configs.values()],
31        "bind_keys": [cfg.bind_key for cfg in registry.configs.values()],
32    }
33
34
35if __name__ == "__main__":
36    main()