qpython.sync() 正在返回 QProjection 而不是查询的数据
qpython.sync() is returning a QProjection instead of the queried data
所以我运行下面的查询没有问题:
print(self.data_source.connections['history'].sync(
'{[x;y;z]select from trade where date within(x;y), sym in z}',
numpy.datetime64('2014-04-14', 'D'),
numpy.datetime64('2017-08-14', 'D'),
NumpyUtil.parse_symbols(['instr81', 'instr61', 'instr26'])
))
这里的 self.data_source.connections[]
只是一个包含 tickerplant、hdb 和 rdb 连接的字典,而 NumpyUtil.parse_symbols()
是一个将参数解析为正确 Numpy 类型的小方法(已成功测试) .
它产生的结果如下,正如所怀疑的那样:
[ ('2017-07-20', b'instr26', 31538122, b'instr14', 93.87083689, 77.0477359 , 81)
('2017-07-20', b'instr26', 31543119, b'instr72', 27.69372507, 80.00145357, 8)
('2017-07-20', b'instr26', 31678121, b'instr56', 58.24375362, 13.93626591, 36)
...,
('2017-07-26', b'instr81', 55344040, b'instr95', 18.75910878, 63.28561637, 98)
('2017-07-26', b'instr81', 81898858, b'instr78', 34.76710694, 8.32085477, 69)
('2017-07-26', b'instr81', 81938857, b'instr97', 64.54823106, 0.16524401, 81)]
完美:)
当我把它放入这个包装器方法时,我的问题出现了:
def synced_query(self, database, query, parameters):
print(self.connections[database].sync(query, parameters))
当传递 完全相同的 参数时,它 return 是其他东西,一个 QProjection:
QProjection(QLambda('{[x;y;z]select from trade where date within(x;y),sym in z}'), [numpy.datetime64('2012-06-20'), numpy.datetime64('2017-07-30'), QList([b'instr81', b'instr61', b'instr26'],
dtype='|S7')])
现在我查看了我的代码(数据在到达 synced_query()
方法之前通过一些函数传递)但我相信数据被正确解析和传递。
当我查看文档时,q.sync()
方法应该只 return 来自 kdb 的消息 return 否则会引发异常。
所以我基本上想知道为什么 kdb 给我这样一个奇怪的答案。有任何想法吗? :)
您似乎需要解压缩 python 列表 parameters
中的值。尝试:
def synced_query(self, database, query, parameters):
print(self.connections[database].sync(query, *parameters))
(注意 *
)
正如您目前所拥有的那样,您正在将一个参数(包含 3 个项目的列表)传递到您的 Q 函数中,但您需要传递 3 个参数。返回 kdb 投影类型,因为您调用了一个参数少于预期的函数。
所以我运行下面的查询没有问题:
print(self.data_source.connections['history'].sync(
'{[x;y;z]select from trade where date within(x;y), sym in z}',
numpy.datetime64('2014-04-14', 'D'),
numpy.datetime64('2017-08-14', 'D'),
NumpyUtil.parse_symbols(['instr81', 'instr61', 'instr26'])
))
这里的 self.data_source.connections[]
只是一个包含 tickerplant、hdb 和 rdb 连接的字典,而 NumpyUtil.parse_symbols()
是一个将参数解析为正确 Numpy 类型的小方法(已成功测试) .
它产生的结果如下,正如所怀疑的那样:
[ ('2017-07-20', b'instr26', 31538122, b'instr14', 93.87083689, 77.0477359 , 81)
('2017-07-20', b'instr26', 31543119, b'instr72', 27.69372507, 80.00145357, 8)
('2017-07-20', b'instr26', 31678121, b'instr56', 58.24375362, 13.93626591, 36)
...,
('2017-07-26', b'instr81', 55344040, b'instr95', 18.75910878, 63.28561637, 98)
('2017-07-26', b'instr81', 81898858, b'instr78', 34.76710694, 8.32085477, 69)
('2017-07-26', b'instr81', 81938857, b'instr97', 64.54823106, 0.16524401, 81)]
完美:)
当我把它放入这个包装器方法时,我的问题出现了:
def synced_query(self, database, query, parameters):
print(self.connections[database].sync(query, parameters))
当传递 完全相同的 参数时,它 return 是其他东西,一个 QProjection:
QProjection(QLambda('{[x;y;z]select from trade where date within(x;y),sym in z}'), [numpy.datetime64('2012-06-20'), numpy.datetime64('2017-07-30'), QList([b'instr81', b'instr61', b'instr26'],
dtype='|S7')])
现在我查看了我的代码(数据在到达 synced_query()
方法之前通过一些函数传递)但我相信数据被正确解析和传递。
当我查看文档时,q.sync()
方法应该只 return 来自 kdb 的消息 return 否则会引发异常。
所以我基本上想知道为什么 kdb 给我这样一个奇怪的答案。有任何想法吗? :)
您似乎需要解压缩 python 列表 parameters
中的值。尝试:
def synced_query(self, database, query, parameters):
print(self.connections[database].sync(query, *parameters))
(注意 *
)
正如您目前所拥有的那样,您正在将一个参数(包含 3 个项目的列表)传递到您的 Q 函数中,但您需要传递 3 个参数。返回 kdb 投影类型,因为您调用了一个参数少于预期的函数。