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
Extends
Source
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