Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python在q-lang查询中转义字符_Python_Escaping_Kdb - Fatal编程技术网

通过Python在q-lang查询中转义字符

通过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 <

我在将查询中的转义序列应用到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 <= 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' 
...