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.
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)
Solutions
- Run the source query once successfully in the Redash UI so a cached result exists, then retry with bring_from_cache
- Pass bring_from_cache=False (omit the id from cached_query_ids) so the runner executes the query live
- 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
- Schedule source queries (alerts/refresh) so a cached result always exists
- Check latest_query_data_id before choosing the cached path
- Treat cache-miss as an automatic trigger to run live rather than an error
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
- No cached result found for this query.
- Invalid JWT token
- Error during query execution. Reason: {error}
- Failed running query [%s].
- Username and Password required
AI-assisted analysis of getredash/redash@ca79fe988d (2026-08-28).
Data as JSON: /api/errors/82893bd1b1e01b1b.
Report an issue: GitHub.