Consulta SQL do Discourse Data Explorer

Tenho uma pergunta muito semelhante à (mas diferente da) pergunta postada aqui: `DataExplorer::ValidationError: Missing parameter` when running Data Explorer queries with [params] via API.

Minha consulta no Data Explorer se parece com isto:

-- [params]
-- topic_id :topic_id

SELECT * FROM posts WHERE topic_id = :topic_id

Isso funciona bem no Data Explorer. Então, quando tento executá-lo via API, recebo:

{"success":false,"errors":["DiscourseDataExplorer::ValidationError: Missing parameter topic_id of type topic_id"]}

Aqui está minha solicitação em Python:


headers = {
    'Content-Type': 'multipart/form-data;',
    'Api-Key': API_KEY,
    'Api-Username': USERNAME_SYSTEM
}

params = {"topic_id": 398}

response = requests.post(url="[REDACTED]/admin/plugins/explorer/queries/10/run", headers=headers, params=params)

Pelo erro, entendo que não posso passar “topic_id” como uma string, mas não vejo como mais posso passá-lo como uma chave. Alguma ideia sobre isso?

1 curtida

Os parâmetros não são passados na URL.

Talvez algo como: data={“params”: ‘{“topic_id”:\"398\"}’}?

Tive que tentar muitas alternativas diferentes, mas esta funcionou:

                         headers=headers, data={'params': '{\\\"topic_id\\\": \"398\"}'})```

Portanto, a resposta é uma combinação da postagem anterior (que dizia que você tem que escapar as aspas ao enviar de uma máquina Windows e a postagem de Arkshine que diz que precisa ser passado como dados e não como um argumento `params`. O que eu acho estranho, no entanto, é que eu pensei que o objetivo do argumento `params` no módulo `requests` do Python era passar informações de parâmetros.
1 curtida

Fico feliz que tenha funcionado!

Tentei enviar Linux (wsl) ou Windows; não tenho o mesmo problema e funcionou para ambos. :thinking:

data = {
    'params': '{\"topic_id\": \"3\"}'
}

response = requests.post(
    url="http://localhost:4200/admin/plugins/explorer/queries/4/run",
    headers=headers,
    data=data
)

image

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.