getredash/redash · error · Exception

Failed loading results for query id {}.

Error message

Failed loading results for query id {}.

What it means

Raised by get_query_results (redash/query_runner/query_results.py:80) when the non-cached path executes the query via query.data_source.query_runner.run_query and that runner returns a non-None error. It is a wrapper: the real cause is whatever made the underlying data source execution fail (SQL syntax, credentials, timeouts, network).

Source

Thrown at redash/query_runner/query_results.py:80

        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)

    for query in set(query_params):
        results = get_query_results(user, query[0], False, query[1])
        table_hash = hashlib.md5(
            "query_{query}_{hash}".format(query=query[0], hash=query[1]).encode(), usedforsecurity=False
        ).hexdigest()
        table_name = "query_{query_id}_{param_hash}".format(query_id=query[0], param_hash=table_hash)
        create_table(connection, table_name, results)

View on GitHub (pinned to ca79fe988d)

Solutions

  1. Open and execute the source query directly in Redash to see the underlying data source error
  2. Fix that root cause (SQL, credentials, connectivity, timeout settings) — this exception carries no extra detail
  3. If the source query is slow, raise its timeout or pre-schedule it and use bring_from_cache=True

Example fix

# before
results = get_query_results(user, qid, bring_from_cache=False)
# after
try:
    results = get_query_results(user, qid, bring_from_cache=False)
except Exception as e:
    logger.error('query %s failed: %s', qid, e)
    results = get_query_results(user, qid, bring_from_cache=True)  # fall back to last good result
Defensive patterns

Strategy: fallback

Validate before calling

results, err = query.data_source.query_runner.run_query(query_text, user)
if err:
    logger.warning('source query %s failed: %s', query_id, err)
    # decide before calling get_query_results whether to proceed

Try / catch

try:
    results = get_query_results(user, qid, False)
except Exception as e:
    logger.error('loader failed for query %s: %s', qid, e)
    results = get_query_results(user, qid, True)  # serve last good cached result

Prevention

When it happens

Trigger: Calling get_query_results with bring_from_cache=False where the source query fails at the data source: bad SQL, expired credentials, unreachable database, query timeout, or unsupported syntax.

Common situations: A results-loader Python query referencing a source query whose SQL recently broke after a schema change; data source password rotation; the source query runs fine interactively but the loader runs it as a different user hitting row-level restrictions.

Related errors


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