我们正在尝试使用qPython构建函数式查询。从简单的示例开始,在运行时构建where条件。我们在外部KDB服务器上定义了一个Q函数,如下所示
fn:{[c]
t: (select from tbl);
:?[t;c;0b;()];
}在Python中,我们打开一个连接并发送条件
c = [['=', numpy.string_('TradeId'), 123456]]
result = conn.sendSync('fn', c)当我这样做时,在Q控制台中我看到=运算符是"=“。问题是如何传递运算符
发布于 2020-04-02 19:17:13
您可以在kdb端对字符串/字符执行value操作,以将其从字符串/字符转换为底层的kdb操作符。这在您的示例中可以工作,但您可能需要一些额外的工作/测试来将其推广到您可能发送的所有可能的运算符:
q)tbl:([]TradeId:0 123456 123456 123456;col2:1 2 3 4)
q)fn:{[c] c:.[c;(::;0);value];t:(select from tbl); :?[t;c;0b;()];}
q)0(`fn;enlist("=";`TradeId;123456))
TradeId col2
------------
123456 2
123456 3
123456 4
q)0(`fn;(("=";`TradeId;123456);("in";`col2;2 4)))
TradeId col2
------------
123456 2
123456 4注意-我正在使用0()在kdb本身内发送请求,但这应该等同于从qPython发送。您需要更改的位是kdb函数中的c:.[c;(::;0);value];
发布于 2020-04-02 20:56:34
@terrylynch特别适用于qPython
来自python发送作品
c = [[ qtype.QLambda( '{x in y}'), numpy.string_('TradeId'), [123, 456,789]]]https://stackoverflow.com/questions/60989393
复制相似问题