Home / Class/ SQLRecordManager Class — langchain Architecture

SQLRecordManager Class — langchain Architecture

Architecture documentation for the SQLRecordManager class in _sql_record_manager.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  9d7938c1_1c25_4cae_be80_9fc00a5ed077["SQLRecordManager"]
  cc7bb185_d3e3_eb58_9979_a81c90c9cc33["RecordManager"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|extends| cc7bb185_d3e3_eb58_9979_a81c90c9cc33
  1a256e96_676d_821c_2976_b0f2b00013b4["UpsertionRecord"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|extends| 1a256e96_676d_821c_2976_b0f2b00013b4
  8bffe3e4_4cad_6b21_a587_b60824b34a04["_sql_record_manager.py"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|defined in| 8bffe3e4_4cad_6b21_a587_b60824b34a04
  48a4d0d2_55bb_219e_63b0_36d264251ed8["__init__()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 48a4d0d2_55bb_219e_63b0_36d264251ed8
  d38c5ed9_23df_c9ef_b249_def6e314ca3f["create_schema()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| d38c5ed9_23df_c9ef_b249_def6e314ca3f
  08d88f20_7879_4e9d_8810_7fbdd02514fb["acreate_schema()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 08d88f20_7879_4e9d_8810_7fbdd02514fb
  82b22123_4423_ea4d_765a_075b780b8c2e["_make_session()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 82b22123_4423_ea4d_765a_075b780b8c2e
  d75b3a18_aeb2_cb98_8ca3_1eab11972c74["_amake_session()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| d75b3a18_aeb2_cb98_8ca3_1eab11972c74
  be7e72a6_66bf_ecc2_56cf_9470c1c3503c["get_time()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| be7e72a6_66bf_ecc2_56cf_9470c1c3503c
  3e4c4a44_922b_f6c5_2589_1953bed0156b["aget_time()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 3e4c4a44_922b_f6c5_2589_1953bed0156b
  5c882370_32cd_fc53_c3f7_ae3deb69e322["update()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 5c882370_32cd_fc53_c3f7_ae3deb69e322
  739947b3_1dd1_a014_7b81_04c8441e1e6c["aupdate()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 739947b3_1dd1_a014_7b81_04c8441e1e6c
  7cdc3154_7921_569d_0792_e88c88c2da9a["exists()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| 7cdc3154_7921_569d_0792_e88c88c2da9a
  e21e2dc4_5757_25df_0c4a_48cfe7f45fad["aexists()"]
  9d7938c1_1c25_4cae_be80_9fc00a5ed077 -->|method| e21e2dc4_5757_25df_0c4a_48cfe7f45fad

Relationship Graph

Source Code

libs/langchain/langchain_classic/indexes/_sql_record_manager.py lines 85–532

class SQLRecordManager(RecordManager):
    """A SQL Alchemy based implementation of the record manager."""

    def __init__(
        self,
        namespace: str,
        *,
        engine: Engine | AsyncEngine | None = None,
        db_url: None | str | URL = None,
        engine_kwargs: dict[str, Any] | None = None,
        async_mode: bool = False,
    ) -> None:
        """Initialize the SQLRecordManager.

        This class serves as a manager persistence layer that uses an SQL
        backend to track upserted records. You should specify either a `db_url`
        to create an engine or provide an existing engine.

        Args:
            namespace: The namespace associated with this record manager.
            engine: An already existing SQL Alchemy engine.
            db_url: A database connection string used to create an SQL Alchemy engine.
            engine_kwargs: Additional keyword arguments to be passed when creating the
                engine.
            async_mode: Whether to create an async engine. Driver should support async
                operations. It only applies if `db_url` is provided.

        Raises:
            ValueError: If both db_url and engine are provided or neither.
            AssertionError: If something unexpected happens during engine configuration.
        """
        super().__init__(namespace=namespace)
        if db_url is None and engine is None:
            msg = "Must specify either db_url or engine"
            raise ValueError(msg)

        if db_url is not None and engine is not None:
            msg = "Must specify either db_url or engine, not both"
            raise ValueError(msg)

        _engine: Engine | AsyncEngine
        if db_url:
            if async_mode:
                _engine = create_async_engine(db_url, **(engine_kwargs or {}))
            else:
                _engine = create_engine(db_url, **(engine_kwargs or {}))
        elif engine:
            _engine = engine

        else:
            msg = "Something went wrong with configuration of engine."
            raise AssertionError(msg)

        _session_factory: sessionmaker[Session] | async_sessionmaker[AsyncSession]
        if isinstance(_engine, AsyncEngine):
            _session_factory = async_sessionmaker(bind=_engine)
        else:
            _session_factory = sessionmaker(bind=_engine)

        self.engine = _engine
        self.dialect = _engine.dialect.name
        self.session_factory = _session_factory

    def create_schema(self) -> None:
        """Create the database schema."""
        if isinstance(self.engine, AsyncEngine):
            msg = "This method is not supported for async engines."
            raise AssertionError(msg)  # noqa: TRY004

        Base.metadata.create_all(self.engine)

    async def acreate_schema(self) -> None:
        """Create the database schema."""
        if not isinstance(self.engine, AsyncEngine):
            msg = "This method is not supported for sync engines."
            raise AssertionError(msg)  # noqa: TRY004

        async with self.engine.begin() as session:
            await session.run_sync(Base.metadata.create_all)

    @contextlib.contextmanager

Frequently Asked Questions

What is the SQLRecordManager class?
SQLRecordManager is a class in the langchain codebase, defined in libs/langchain/langchain_classic/indexes/_sql_record_manager.py.
Where is SQLRecordManager defined?
SQLRecordManager is defined in libs/langchain/langchain_classic/indexes/_sql_record_manager.py at line 85.
What does SQLRecordManager extend?
SQLRecordManager extends RecordManager, UpsertionRecord.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free