2

我设法将查询导入另一个帐户。我使用了 Redash 给出的端点 POST 函数,它只适用于“修改/替换”:https ://github.com/getredash/redash/blob/5aa620d1ec7af09c8a1b590fc2a2adf4b6b78faa/redash/handlers/queries.py#L178

所以实际上,如果我想导入一个新的查询我应该怎么做?我想创建一个在我的帐户中不存在的新查询。我在看https://github.com/getredash/redash/blob/5aa620d1ec7af09c8a1b590fc2a2adf4b6b78faa/redash/handlers/queries.py#L84

以下是我在 query_id 不存在时创建新查询的函数。

url = 路径,api = 用户 api,f = 文件名,query_id = 本地桌面中文件的 query_id

def new_query(url, api, f, query_id):
    headers ={'Authorization': 'Key {}'.format(api), 'Content-Type': 'application/json'}
    path = "{}/api/queries".format(url)
    query_content = get_query_content(f)
    query_info = {'query':query_content}
    print(json.dumps(query_info))
    response = requests.post(path, headers = headers, data = json.dumps(query_info))
    print(response.status_code)

我收到 response.status_code 500。我的代码有什么问题吗?我应该如何解决它?

4

2 回答 2

1

供将来参考:-) 这是一个创建新查询的python POST:

    payload = {
               "query":query, ## the select query
               "name":"new query name",
               "data_source_id":1, ## can be determined from the /api/data_sources end point
               "schedule":None,
               "options":{"parameters":[]}
               }
    res = requests.post(redash_url + '/api/queries', 
                        headers = {'Authorization':'Key YOUR KEY'},
                        json=payload)

(通过与@JohnDenver 的离线讨论找到了解决方案)

于 2021-02-22T09:10:24.020 回答
0

TL;博士:

...
query_info = {'query':query_content,'data_source_id':<find this number>}
...

详细:

我有一个类似的问题。检查redash 源代码,它寻找data_source_id。我将其添加data_source_id到我的数据有效负载中。

data_source_id您可以通过查看“获取查询”调用的响应来找到合适的:

import json
def find_data_source_id(url,query_number,api)
    path = "{}/api/queries/{}".format(url,query_number)
    headers ={'Authorization': 'Key {}'.format(api), 'Content-Type': 'application/json'}
    response = requests.get(path, headers = headers)
    return json.loads(response.text)['data_source_id']

于 2020-09-03T01:20:46.307 回答