Я смог успешно использовать оба предложенных вами метода
>>> import requests
>>> r = requests.get("http://localhost:35207/.json?enlist trades")
>>> r.json()
[{'time': '2019-02-07D08:00:53.319000000', 'sym': 'ORCL', 'src': 'N', 'price': 32.23, 'size': 1099}, {'time': '2019-02-07D08:01:26.649000000', 'sym': 'YHOO', 'src': 'O', 'price': 35.52, 'size': 471}, {'time': '2019-02-07D08:01:36.413000000', 'sym': 'YHOO', 'src': 'L', 'price': 35.52, 'size': 438}]
>>>
Требуется enlist
согласно примечанию на https://code.kx.com/q/ref/doth/#htx-filetypes
Обратите внимание, что здесь используется .json
аналогично .csv
в вашем примере CSV-запроса;kdb будет автоматически кодировать ответ в виде JSON при отправке запроса, подобного этому.
Примечание: это будет работать в версиях kdb 3.3+ (поддержка JSON была добавлена в 3.2, запрос через HTTP был добавлен в 3.3).Чтобы использовать подобное в более старых версиях, вы можете загрузить json.k с kx и сделать следующее:
q)\l json.k //from kx, not needed for 3.2
q).h.ty[`jsn]:"application/json"
q).h.tx[`jsn]:.j.j'
, а затем изменить HTTP-запрос на r = requests.get("http://localhost:35207/.jsn?enlist trades")
-> не расширение.jsn
, который является хаком, чтобы избежать изменения .z.ph
, обработчика HTTP-запросов.[Я проверял это на v2.8]
В качестве альтернативы, используя CSV & Pandas:
>>> import pandas as pd
>>> pd.read_csv("http://localhost:35207/.csv?trades")
time sym src price size
0 2019-02-07D08:00:53.319000000 ORCL N 32.23 1099
1 2019-02-07D08:01:26.649000000 YHOO O 35.52 471
2 2019-02-07D08:01:36.413000000 YHOO L 35.52 438
Если у вас все еще возникают проблемы с этими методами, пожалуйста, опубликуйте подробные сообщения об ошибках, чтобы помочь с отладкой.
Как заметили другие, вероятно, будет гораздо проще, если использовать одну из доступных библиотек q-python, но я думаю, что если это невозможно, это должно быть выполнимо по HTTP-запросам, как указано выше..