通过Python在q-lang查询中转义字符
我在将查询中的转义序列应用到kdb服务器时遇到问题通过Python在q-lang查询中转义字符,python,escaping,kdb,Python,Escaping,Kdb,我在将查询中的转义序列应用到kdb服务器时遇到问题 query = 'select lo:min price, hi:max price by sym from trade where date = 2007.02.28, corr <= 1' 本机查询是: select lo:min price, hi:max price by sym from trade where date = 2007.02.28, not cond like "*[BMPQTUWZ]*", corr <
query = 'select lo:min price, hi:max price by sym from trade where date = 2007.02.28, corr <= 1'
本机查询是:
select lo:min price, hi:max price by sym from trade where date = 2007.02.28, not cond like "*[BMPQTUWZ]*", corr <= 1
选择lo:min price,hi:max price by sym from trade,其中date=2007.02.28,而不是像“*[BMPQTUWZ]*”这样的条件,corr python.exe。\test-1.py
尝试打开连接。。。
连接已建立。。。
尝试发送查询“2+2”
回溯(最近一次呼叫最后一次):
文件“\test-1.py”,第23行,在
df=pd.DataFrame(q.sendSync(查询))
文件“C:\Python38\lib\site packages\pandas\core\frame.py”,第509行,在\uuu init中__
raise VALUERROR(“未正确调用数据帧构造函数!”)
ValueError:未正确调用数据帧构造函数!
PS G:\atom projects\test>python.exe。\test-1.py
尝试打开连接。。。
连接已建立。。。
尝试发送查询选择lo:min price,hi:max price by sym from trade,其中date=2007.02.28,而不是像“*[BMPQTUWZ]*”这样的条件,corr是否尝试转义方括号
query='选择lo:min price,hi:max price by sym from trade,其中date=2007.02.28,而不是cond like\“\[BMPQTUWZ\]\”,corr我认为您希望运行类似以下内容:
…在“BMPQTUWZ”中没有条件的地方逃逸对我来说很好:
q)t:([]sym:100?`1;cond:100#`Buy`Sell`Example;corr:100?2f;price:100?100f)
q)t
sym cond corr price
------------------------------
n Buy 1.339583 82.48839
m Sell 1.17743 95.01603
a Example 1.135715 54.35053
o Buy 0.7889166 29.12758
b Sell 1.851226 45.29782
…
df = q.sendSync('select hi:max price, lo:min price, cond:first cond by sym from t where not cond like \"[BS]*\"')
df
hi lo cond
sym
b'a' 64.230790 24.164567 b'Example'
b'b' 60.669536 12.766243 b'Example'
b'c' 85.688555 79.785111 b'Example'
b'd' 83.056125 83.056125 b'Example'
b'e' 73.149409 73.149409 b'Example'
b'f' 93.359214 36.638445 b'Example'
...
“\'2+2\'”
失败,因为返回了4,并且不能在数据帧中显示
由于超时,您的选择似乎失败。也许可以尝试增加你的休息时间
另外,您希望通过select实现什么目标?我的示例不是cond以B或S开头的地方,所以只返回示例
如果cond是一个单字符列而不是一个符号,那么上面康纳的建议可能更快更好。如果它是一个符号列,像我上面的整个词<必须使用code>如/Regex
。是的,我已经尝试过了,尽管方括号不是转义符号。我已经更新了有格式问题的答案。很可能你是对的,因为查询成功了。我需要再跑几次,然后我会确认你的答案是最好的。事实上,我得到了这个查询(我还没有提出),我认为这是一个好的查询。方括号是需要的,否则含义就改变了。原来是因为超时时间短。可能是因为查询更复杂。所以你的建议就是解决问题的答案。。。
query = 'select lo:min price, hi:max price by sym from trade where date = 2007.02.28, corr <= 1'
q)t:([]sym:100?`1;cond:100#`Buy`Sell`Example;corr:100?2f;price:100?100f)
q)t
sym cond corr price
------------------------------
n Buy 1.339583 82.48839
m Sell 1.17743 95.01603
a Example 1.135715 54.35053
o Buy 0.7889166 29.12758
b Sell 1.851226 45.29782
…
df = q.sendSync('select hi:max price, lo:min price, cond:first cond by sym from t where not cond like \"[BS]*\"')
df
hi lo cond
sym
b'a' 64.230790 24.164567 b'Example'
b'b' 60.669536 12.766243 b'Example'
b'c' 85.688555 79.785111 b'Example'
b'd' 83.056125 83.056125 b'Example'
b'e' 73.149409 73.149409 b'Example'
b'f' 93.359214 36.638445 b'Example'
...