У меня проблемы с применением escape-последовательностей в запросе к серверу kdb.
Собственный запрос:
select lo:min price, hi:max price by sym from trade where date = 2007.02.28, not cond like "*[BMPQTUWZ]*", corr <= 1
Любая помощь приветствуется.
Я используя Python, чтобы отправить его, и я ставлю \ "for" в запросе, чтобы передать знак двойной кавычки:
from qpython import qconnection
import pandas as pd
from datetime import datetime
query = 'select lo:min price, hi:max price by sym from trade where date = 2007.02.28, not cond like \"*[BMPQTUWZ]*\", corr <= 1'
#query = '\"2+2\"'
print('Attempt to open a connection...')
q = qconnection.QConnection(host=server, port=server_port, username=user, password=server_password, timeout=server_timeout, pandas = True)
q.open()
print('Connection established...')
print('Attempt to send the query', query)
df = pd.DataFrame(q.sendSync(query))
print('Query <<', query, '>> sent...')
Вывод для '"2 + 2"' и вывод для 'select lo: минимальная цена, hi: максимальная цена по символу от сделки, где дата = 2007.02.28, не соответствует типу \ " [BMPQTUWZ] \", corr <= 1 'указан ниже. </p>
PS G:\atom-projects\test> python.exe .\test-1.py
Attempt to open a connection...
Connection established...
Attempt to send the query "2+2"
Traceback (most recent call last):
File ".\test-1.py", line 23, in <module>
df = pd.DataFrame(q.sendSync(query))
File "C:\Python38\lib\site-packages\pandas\core\frame.py", line 509, in __init__
raise ValueError("DataFrame constructor not properly called!")
ValueError: DataFrame constructor not properly called!
PS G:\atom-projects\test> python.exe .\test-1.py
Attempt to open a connection...
Connection established...
Attempt to send the query select lo:min price, hi:max price by sym from trade where date = 2007.02.28, not cond like "*[BMPQTUWZ]*", corr <= 1
Traceback (most recent call last):
File ".\test-1.py", line 23, in <module>
df = pd.DataFrame(q.sendSync(query))
File "C:\Python38\lib\site-packages\qpython\qconnection.py", line 303, in sendSync
response = self.receive(data_only = False, **options)
File "C:\Python38\lib\site-packages\qpython\qconnection.py", line 380, in receive
result = self._reader.read(**self._options.union_dict(**options))
File "C:\Python38\lib\site-packages\qpython\qreader.py", line 138, in read
message = self.read_header(source)
File "C:\Python38\lib\site-packages\qpython\qreader.py", line 158, in read_header
header = self._read_bytes(8)
File "C:\Python38\lib\site-packages\qpython\qreader.py", line 388, in _read_bytes
data = self._stream.read(length)
File "C:\Python38\lib\socket.py", line 669, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
Теперь у меня проблемы с escape-символами.
Если я отправлю запрос на сервер kdb.
query = 'select lo:min price, hi:max price by sym from trade where date = 2007.02.28, corr <= 1'
запрос будет передан. Но когда я добавляю не так, как \ " [BMPQTUWZ] \" , возникает ошибка.
ОС и Python сведения о языке: Windows 10, x64, Python 3.8.1