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