qPython 功能查询

qPython Functional Queries

我们正在尝试使用 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 控制台中我看到 = 运算符为“=”。 问题是如何传递运算符

您可以 value kdb 端的 string/char 将其从 string/char 转换为底层 kdb 运算符。这在您的示例中有效,但您可能需要一些额外的 work/testing 将其推广到您可能发送的所有可能的运算符:

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

@terrylynch 回答有效 特别是 qPython

来自python发送作品

 c = [[ qtype.QLambda( '{x in  y}'), numpy.string_('TradeId'), [123, 456,789]]]