qpython.sync()返回QProjection而不是查询数据

时间:2017-07-27 09:52:51

标签: python numpy kdb qpython

所以我正在运行以下查询而没有问题:

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类型的方法(已成功测试)。 / p>

它产生的结果如下所示:

[ ('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))

当传递完全相同的参数时,它会返回其他内容,即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()方法应该只返回从kdb返回的消息,否则会引发异常。

所以我基本上想知道为什么kdb会给我这么奇怪的答案。有任何想法吗? :)

1 个答案:

答案 0 :(得分:1)

看起来您需要解压缩python列表parameters中的值。尝试:

def synced_query(self, database, query, parameters):
    print(self.connections[database].sync(query, *parameters))

(注意*

正如您目前所拥有的那样,您将一个参数(包含3个项目的列表)传入您的Q函数,但您需要传入3个参数。返回kdb Projection类型是因为您调用的参数少于预期的函数。