Skip to content

Instantly share code, notes, and snippets.

@arikfr
Last active February 1, 2023 11:24
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save arikfr/e3e434d8cfd7f331d499ccf351abbff9 to your computer and use it in GitHub Desktop.
Save arikfr/e3e434d8cfd7f331d499ccf351abbff9 to your computer and use it in GitHub Desktop.
Redash Refresh API usage example with parameters Raw
import os
import requests
import time
from pprint import pprint
def poll_job(s, redash_url, job):
# TODO: add timeout
while job['status'] not in (3,4):
response = s.get('{}/api/jobs/{}'.format(redash_url, job['id']))
job = response.json()['job']
time.sleep(1)
if job['status'] == 3:
return job['query_result_id']
return None
def get_fresh_query_result(redash_url, query_id, api_key, parameters):
s = requests.Session()
s.headers.update({'Authorization': 'Key {}'.format(api_key)})
body = {
"parameters": parameters
}
response = s.post('{}/api/queries/{}/results'.format(redash_url, query_id), json=body)
if response.status_code != 200:
raise Exception('Refresh failed.')
result_id = poll_job(s, redash_url, response.json()['job'])
if result_id:
response = s.get('{}/api/queries/{}/results/{}.json'.format(redash_url, query_id, result_id))
if response.status_code != 200:
raise Exception('Failed getting results.')
else:
raise Exception('Query execution failed.')
return response.json()['query_result']['data']['rows']
if __name__ == '__main__':
params = {'param': 1243}
query_id = 1234
# Need to use a *user API key* here (and not a query API key).
api_key = '...'
pprint(get_fresh_query_result('https://app.redash.io/acme', query_id, api_key, params))
@Salbinus
Copy link

Salbinus commented Jun 7, 2019

Hi,
I've expected the response to be the query result in json format. Instead, I got the html of the UI (which results in a JSONDecodeError).
Just made the adjustment for the parameters (ID's and URI).
What I have to do to get the expected output?

@kishandonepudi
Copy link

Hi,
I've expected the response to be the query result in json format. Instead, I got the html of the UI (which results in a JSONDecodeError).
Just made the adjustment for the parameters (ID's and URI).
What I have to do to get the expected output?

I had this same issue, can you pls let know incase you resolved it

@Salbinus
Copy link

Hi,
I've expected the response to be the query result in json format. Instead, I got the html of the UI (which results in a JSONDecodeError).
Just made the adjustment for the parameters (ID's and URI).
What I have to do to get the expected output?

I had this same issue, can you pls let know incase you resolved it

I didn't solved this but my information is that the company I'm working for is blocking the API due to security concerns.

@ashi-taka
Copy link

How do I find the "user API"? Replicating the above code to send the refresh query result on email.

@aborruso
Copy link

@Salbinus
Copy link

@aborruso It should be the 4 digit query ID which you can find in any URL. e.g. "redash.example.domain/queries/->4 digit number<-"

@aborruso
Copy link

@Salbinus but in the script there is 1243 and also 1234.

@Salbinus
Copy link

@aborruso ,good Point. havn't recognized this. I'm not absolutely Sure but it seems to be the Parameter , you can add to any query for reusability, See here: https://redash.io/help/user-guide/querying/query-parameters
If so, it should be optional.

@susodapop
Copy link

@aborruso The value 1243 is a query parameter. The value 1234 is a query_id. These are just dummy numbers. If it helps, acme isn't a real organization 😛. To run this script, you would replace them with real values. Also, you can add more than one parameter. It depends how many parameters your query requires.

@aborruso
Copy link

@susodapop my goal will be to work in ACME !!

Thank you ;)

@czen
Copy link

czen commented Jun 10, 2020

Well this works just fine with 2 year old installation of redash, which is rather unexpected for some random gist on github.
Thanks!

@susodapop
Copy link

@czen this "random gist on github" was written by the founder of Redash 😀

Nowadays you can also use redash-toolbelt to do this and many other operations as well. It's the officially maintained Redash API Python client.

@eddy1134
Copy link

eddy1134 commented Jun 1, 2022

i wonder, would there happen to be a way to have the query results stored as an excel file / csv / tsv instead of a json? would certainly make it easier for mass consumption.

@susodapop
Copy link

i wonder, would there happen to be a way to have the query results stored as an excel file / csv / tsv instead of a json? would certainly make it easier for mass consumption.

CSV, TSV, and Excel versions of the results are already available through the API.

@natecole25
Copy link

Are there any plans to add the ability to retrieve results from a parameterized query with a query api token instead of a user api token? My understanding is that currently this is not possible (as denoted by line 45 in the sample code above).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment