getredash/redash · error · Exception

No cached result available for query

Error message

No cached result available for query {}.

What it means

Raised by get_query_results (redash/query_runner/query_results.py:72) when bring_from_cache is true but the query has never produced a result — query.latest_query_data_id is None, so there is no cached QueryResult to return. The cached path intentionally never executes the underlying query.

Solutions

  1. Run the source query once successfully in the Redash UI so a cached result exists, then retry with bring_from_cache
  2. Pass bring_from_cache=False (omit the id from cached_query_ids) so the runner executes the query live
  3. If the result was deleted by retention/cleanup, re-execute the query and consider a longer result retention setting

Example fix

# before
results = get_query_results(user, qid, bring_from_cache=True)  # fails if never run
# after
results = get_query_results(user, qid, bring_from_cache=query.latest_query_data_id is not None)
Defensive patterns

Strategy: fallback

Validate before calling

query = models.Query.get_by_id(query_id)
use_cache = bring_from_cache and query.latest_query_data_id is not None
results = get_query_results(user, query_id, use_cache)

Try / catch

try:
    results = get_query_results(user, qid, True)
except Exception as e:
    if 'No cached result' in str(e):
        results = get_query_results(user, qid, False)  # execute live
    else:
        raise

Prevention

When it happens

Trigger: Calling get_query_results(user, query_id, bring_from_cache=True) (or in Python queries, adding the query id to the cached_query_ids argument) for a query that has not been run successfully yet, or whose results were deleted/archived.

Common situations: Newly created queries referenced by the results-loader before their first execution; cached results expired and were cleaned up by the periodic job; queries whose last run failed so latest_query_data was never set.

Related errors


AI-assisted analysis of getredash/redash@ca79fe988d (2026-08-28). Data as JSON: /api/errors/82893bd1b1e01b1b. Report an issue: GitHub.

Appendix: source

Thrown at redash/query_runner/query_results.py:72

        raise PermissionError("You do not have access to query id {}.".format(query.id))

    return query


def replace_query_parameters(query_text, params):
    qs = parse_qs(params)
    for key, value in qs.items():
        query_text = query_text.replace("{{{{{my_key}}}}}".format(my_key=key), value[0])
    return query_text


def get_query_results(user, query_id, bring_from_cache, params=None):
    query = _load_query(user, query_id)
    if bring_from_cache:
        if query.latest_query_data_id is not None:
            results = query.latest_query_data.data
        else:
            raise Exception("No cached result available for query {}.".format(query.id))
    else:
        query_text = query.query_text
        if params is not None:
            query_text = replace_query_parameters(query_text, params)

        results, error = query.data_source.query_runner.run_query(query_text, user)
        if error:
            raise Exception("Failed loading results for query id {}.".format(query.id))

    return results


def create_tables_from_query_ids(user, connection, query_ids, query_params, cached_query_ids=[]):
    for query_id in set(cached_query_ids):
        results = get_query_results(user, query_id, True)
        table_name = "cached_query_{query_id}".format(query_id=query_id)
        create_table(connection, table_name, results)

View on GitHub (pinned to ca79fe988d)