我试图通过Python访问KDB + / Q表。我知道有一些库,帮助蟒蛇&Q之间的通信,但我想看看是否有可能这样做,而不使用上述库,有上KDB +版本的一些限制。
我最初的猜测是:
什么是蟒蛇检索KDB表的灵活/简单的方法?任何建议/指导,将不胜感激。谢谢
我可以用你的成功表明这两种方法
>>> 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+(3.2中添加JSON支持,查询通过HTTP 3.3中加入)。如果要使用旧版本类似,您可以从KX下载json.k&做到以下几点:
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请求处理程序。 [I测试此上V2.8]
或者,使用CSV&熊猫:
>>> 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请求可行如上。
PyQ可能是最常用和最支持的方法。你说你有版本的限制,但PYQ已经存在了很长一段时间,我敢肯定,你可以下载它与旧版本KDB的兼容版本。
如果不是这样,一些其他的选项有:
https://github.com/exxeleron/qPython
https://code.kx.com/q/interfaces/embedpy/
和几个选择这里记载:http://www.timestored.com/kdb-guides/python-api
在所有这些我敢肯定你会发现一些作品
更好的选择是由@Terrylynch提到使用已有的API的Python-Q的整合。这将简化很多操作,将是更有效的,以及大多数的情况下。
但是,如果你想使用Python中的http请求完全做到这一点,那么你可以使用“请求”模块:
import requests as req
res=req.get("http://localhost:5000/?.j.j t")
res.text
样本输出
'<html><head><style>a{text-decoration:none}a:link{color:024C7E}a:visited{color:024C7E}a:active{color:958600}body{font:10pt verdana;text-align:justify}</style></head><body>
<pre>"[{\\"id\\":1,\\"v\\":3},\\n {\\"id\\":2,\\"v\\":4}]"\n</pre></body></html>'
正如你所看到的,所以你需要分析它从所需的变量得到的结果,这将使你的HTML文本。有几个可用的HTML解析Python模块,所以你可以使用它们。