Ich habe eine Frage, die der hier geposteten sehr ähnlich ist (aber anders): `DataExplorer::ValidationError: Missing parameter` when running Data Explorer queries with [params] via API.
Meine Abfrage im Data Explorer sieht so aus:
-- [params]
-- topic_id :topic_id
SELECT * FROM posts WHERE topic_id = :topic_id
Das funktioniert im Data Explorer einwandfrei. Wenn ich dann versuche, sie über die API auszuführen, erhalte ich:
{"success":false,"errors":["DiscourseDataExplorer::ValidationError: Missing parameter topic_id of type topic_id"]}
Hier ist meine Python-Anfrage:
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)
Ich entnehme der Fehlermeldung, dass ich “topic_id” nicht als String übergeben kann, aber ich sehe keine andere Möglichkeit, es als Schlüssel zu übergeben. Irgendwelche Gedanken dazu?
Die Parameter werden nicht in der URL übergeben.
Vielleicht so etwas wie: data={“params”: ‘{“topic_id”:\"398\"}’}?
Ich musste viele verschiedene Alternativen ausprobieren, aber diese funktionierte:\n\nresponse = requests.post(url=\"REDACTED\",\n headers=headers, data={'params': '{\\\"topic_id\\\": \"398\"}'})\n\nDie Antwort ist also eine Kombination aus dem vorherigen Beitrag (der besagte, dass man Anführungszeichen maskieren muss, wenn man von einem Windows-Rechner sendet) und Arkshines Beitrag, der besagt, dass es als Daten und nicht als Parameter-Keyword-Argument übergeben werden muss. Was ich jedoch seltsam finde, ist, dass ich dachte, der Sinn des Parameter-Keyword-Arguments im Python-Requests-Modul sei die Übergabe von Parameterinformationen.
Es freut mich, dass es funktioniert hat!
Ich habe versucht, Linux (wsl) oder Windows zu senden; ich habe nicht das gleiche Problem und es hat für beides funktioniert. 
data = {
'params': '{\"topic_id\": \"3\"}'
}
response = requests.post(
url="http://localhost:4200/admin/plugins/explorer/queries/4/run",
headers=headers,
data=data
)
