IntegrationsStreamlit

Streamlit

Streamlit components for Hotdata — run SQL, display results, and manage databases inside your Streamlit apps.

Install

pip install hotdata-streamlit

Authentication

Pass your API key and workspace ID when creating a client, or load them from environment variables in your app's secrets.

import hotdata_streamlit as hs

client = hs.get_or_create_client(
    api_key=st.secrets["HOTDATA_API_KEY"],
    workspace_id=st.secrets["HOTDATA_WORKSPACE"],
)

Quickstart

import streamlit as st
import hotdata_streamlit as hs

client = hs.get_or_create_client(
    api_key=st.secrets["HOTDATA_API_KEY"],
    workspace_id=st.secrets["HOTDATA_WORKSPACE"],
)

sql = st.text_area("SQL", value="SELECT 1 AS ok")
if st.button("Run"):
    result = hs.run_sql(sql, client=client)
    hs.render_query_result(result)

Run SQL and display results

# Execute SQL and render as a dataframe with row/column counts
result = hs.run_sql("SELECT * FROM orders LIMIT 10", client=client)
hs.render_query_result(result)

For cached read-only queries (avoids re-running on every rerender):

df = hs.cached_query_dataframe(
    sql="SELECT * FROM orders LIMIT 100",
    _client=client,
)
st.dataframe(df)

Connection status

Show a health badge in your sidebar or header:

hs.render_connection_status(client)

Managed databases

Render a full UI for creating managed databases and loading parquet tables:

hs.render_managed_database_writer(client)

This renders:

  • A list of existing managed databases
  • A form to create a new database and declare tables
  • A form to upload a parquet file into a declared table

You can also call the underlying functions directly:

# List databases as rows for a custom table
rows = hs.managed_databases_rows(client)
st.dataframe(rows)

# Create a database programmatically
db = hs.create_managed_database(client, name="sales", tables=["orders"])

# Upload and load a parquet file from bytes
loaded = hs.load_managed_table_from_bytes(
    client,
    "db_abc123",
    "orders",
    parquet_bytes,
)
st.success(f"Loaded {loaded.row_count} rows into {loaded.full_name}")

Reference

FunctionDescription
get_or_create_client(api_key, workspace_id)Create or reuse a session-scoped client
run_sql(sql, client, database=None)Execute SQL, return QueryResult
cached_query_dataframe(sql, _client)Cached SQL query returning a pandas DataFrame
render_query_result(result)Display query rows and metadata
render_connection_status(client)Show workspace health badge
render_managed_database_writer(client)Full create + load UI
render_managed_databases_panel(client)List managed databases
managed_databases_rows(client)Return databases as list[dict]
create_managed_database(client, name, tables)Create a managed database
load_managed_table_from_bytes(client, database, table, bytes)Upload and load parquet

See also