python - 在 Json 中通过 python 访问 kdb+/q 表?
问题描述
我正在尝试通过 python 访问 kdb+/q 表。我知道有一些库可以帮助 python 和 q 之间的通信,但我想看看是否可以在不使用上述库的情况下这样做,因为 kdb+ 版本有一些限制。
我最初的猜测是:
在 kdb+q 中定义表;使用 urllib- urllib.request.get("localhost:5000?.jk TABLE_NAME") 通过 python 访问 kdb 但没有成功。
我使用的另一种方法是使用 pd.read_csv("localhost:5000/q.csv?select from table ...") 但由于 HTTP 406 错误,这种方法无法解决。
从 python 中检索 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}]
>>>
根据https://code.kx.com/q/ref/doth/#htx-filetypes上的说明,这enlist
是必需的
请注意,.json
此处使用的,类似于.csv
您的示例 CSV 查询;当发送这样的查询时,kdb 将自动将响应编码为 JSON。
注意:这将适用于 kdb 3.3+ 的版本(3.2 中添加了 JSON 支持,3.3 中添加了通过 HTTP 查询)。要在旧版本上使用类似功能,您可以从 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")
-> not the extension .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 请求实现。
推荐阅读
- android - 使 Android 应用仅适用于 Playstore 上的工作资料
- firebase - HMS 华为管理服务
- flutter - 从 dart 向 wit.ai 发送分块音频请求
- java - 如何使用 Apache httpclient5 从 SimpleHttpResponse 获取 HttpEntity
- angular - Angular Unit Test - 如何获取对组件范围提供者的引用?
- c - 在 zephyr 上使用 west build-flash
- swift - 将 combine 的 Future 映射到新的输出和失败
- angular - 从样式标签调用函数时的 ExpressionChangedAfterItHasBeenCheckedError
- javascript - 如何通过 isDisliked 字段为 false 的位置填充用户 ID
- batch-file - 批处理:由于路径中的空格,未输入 For 循环?