Give your LangChain agents access to Hotdata — run SQL against your workspace connections and work with managed databases.
pip install hotdata-langchainSet HOTDATA_API_KEY in your environment. Optionally set HOTDATA_WORKSPACE to pin a specific workspace (the first available workspace is used if unset).
from langchain.agents import AgentExecutor, create_tool_calling_agent
import hotdata_langchain as hl
client = hl.from_env()
tools = hl.make_hotdata_tools(client)
agent = create_tool_calling_agent(llm=your_llm, tools=tools, prompt=your_prompt)
executor = AgentExecutor(agent=agent, tools=tools)
result = executor.invoke({"input": "How many rows are in the orders table?"})make_hotdata_tools(client) returns a list of LangChain StructuredTool objects ready to pass to any agent:
| Tool | What it does |
|---|---|
hotdata_execute_sql |
Run a SQL query and return rows as JSON |
hotdata_list_managed_databases |
List available managed databases |
hotdata_create_managed_database |
Create a new managed database |
hotdata_load_managed_table |
Load a parquet file into a managed table |
You can also invoke tools outside of an agent loop:
tools = {t.name: t for t in hl.make_hotdata_tools(client)}
result = tools["hotdata_execute_sql"].invoke({"sql": "SELECT * FROM orders LIMIT 10"})
print(result) # JSON rows
tools["hotdata_create_managed_database"].invoke({
"name": "sales",
"schema_name": "public",
"tables": "orders,customers",
})
tools["hotdata_load_managed_table"].invoke({
"database": "sales",
"table": "orders",
"file": "/path/to/orders.parquet",
})Pass database= so all SQL the agent runs resolves against a specific managed database:
tools = hl.make_hotdata_tools(client, database="sales")Limit how many rows are returned to the LLM. Useful for keeping responses within context limits (default: 100):
tools = hl.make_hotdata_tools(client, max_rows=50)uv run python examples/langchain_basic.py
uv run python examples/langchain_managed_db.pyuv sync --locked
uv run pytest