Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Json中通过python访问kdb+/q表?_Python_Python Requests_Kdb - Fatal编程技术网

在Json中通过python访问kdb+/q表?

在Json中通过python访问kdb+/q表?,python,python-requests,kdb,Python,Python Requests,Kdb,我试图通过python访问kdb+/q表。我知道有一些库可以帮助python&q之间的通信,但我想看看是否有可能不使用上述库,因为kdb+版本有一些限制 我最初的猜测是: 在kdb+q中定义表格;使用urllib通过python访问kdb- urllib.request.getlocalhost:5000?.j.k表_名称,但未成功 我的另一种方法是使用pd.read_csvlocalhost:5000/q.csv?从表中选择。。。但由于HTTP406错误,这种方法无法工作 从python检索k

我试图通过python访问kdb+/q表。我知道有一些库可以帮助python&q之间的通信,但我想看看是否有可能不使用上述库,因为kdb+版本有一些限制

我最初的猜测是:

在kdb+q中定义表格;使用urllib通过python访问kdb- urllib.request.getlocalhost:5000?.j.k表_名称,但未成功

我的另一种方法是使用pd.read_csvlocalhost:5000/q.csv?从表中选择。。。但由于HTTP406错误,这种方法无法工作

从python检索kdb表的灵活/简单方法是什么?如有任何建议/指导,将不胜感激。感谢

可能是最常用和最受支持的方法。你说你有版本限制,但PyQ已经存在很长时间了,我相信你可以下载与旧版本的kdb兼容的版本

如果没有,其他一些选项包括:

这里记录了一些选项:


综上所述,我相信您会发现一些行之有效的方法。

更好的选择是使用@terrylyynch提到的用于Python-Q集成的现有api。这将简化许多操作,并且在大多数情况下也将更加有效

但是,如果您想完全在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文本,因此您需要对其进行解析,以从所需的标记中获得结果。有两个python模块可用于html解析,因此您可以使用它们。

我成功地使用了您建议的两种方法

q)\l json.k //from kx, not needed for 3.2
q).h.ty[`jsn]:"application/json"
q).h.tx[`jsn]:.j.j'
根据上的注释,需要登记

注意,这里使用的是.json,类似于示例csv查询中的.csv;当发送这样的查询时,kdb将自动将响应编码为JSON

注意:3.2中添加了kdb 3.3+JSON支持,3.3中添加了通过HTTP进行查询。要在旧版本上使用类似功能,可以从kx下载并执行以下操作:

>>> 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
然后将HTTP查询修改为r=requests。gethttp://localhost:35207/.jsn?enlist 交易->而不是扩展名.jsn,这是为了避免修改HTTP请求处理程序.z.ph而进行的黑客攻击。[我在v2.8上对此进行了测试]

或者,使用CSV和熊猫:

如果这些方法仍然存在问题,请发布详细的错误输出以帮助调试

正如其他人所观察到的,使用一个可用的q-python库可能会更简单,但我认为如果这不可能,那么应该可以通过HTTP请求实现,如上所述

>>> 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