Я пытаюсь использовать Python для поиска в базе данных InfluxDB данных, точно совпадающих с конкретными координатами. Я преобразовал все координаты из широты / долготы в плюс коды (т.е. 9C4WXRRQ + 69). Для поиска в InfluxDB похожих кодов мне нужно использовать RegEx, что требует от меня экранирования символа «+» с помощью обратной косой черты.
Когда я отправляю запрос из Python, он добавляет вторую обратную косую черту (которую я знаю, что Python использует для отображения одной обратной косой черты), которая затем приводит к неудачному запросу. Есть ли способ отправить строковый запрос из Python только с одной обратной косой чертой, или я должен придерживаться метода «выдумки», чтобы убрать все знаки «+» из моих кодов и тем самым отрицать необходимость?
Я пробовал методы, упомянутые в приведенных ниже вопросах, наряду со многими другими, но все они отправляют двойной обратный слеш.
Почему необработанные строковые литералы Python не могут заканчиваться одним обратным слешем?
Как заменить двойную обратную косую черту на одну обратную косую черту в python?
В Influx CMD я могу использовать следующее:
SELECT count(olc) FROM OLC WHERE olc =~ /9C4WXRRQ\+69*/
Что возвращает:
name: OLC
time count
---- -----
0 1104
Однако, если я отправлю тот же запрос из Python:
influx.query("SELECT count(olc) FROM OLC WHERE olc =~ /9C4WXRRQ\+69*/")
Показание InfluxDB дает следующее (которое показывает двойной обратный слеш) и возвращает пустой ответ:
2019-01-17T14:20:28.849772Z info Executing query {"log_id": "0C~7QHG0000", "service": "query", "query": "SELECT count(olc) FROM olctest.autogen.OLC WHERE olc =~ /9C4WXRRQ\\+69*/"}
Если я удаляю все знаки «+» из кодов «плюс», запрос работает нормально:
influx.query("SELECT count(olc) FROM OLC WHERE olc =~ /9C4WXRRQ69*/")
В результате:
ResultSet({'('OLC', None)': [{'time': '1970-01-01T00:00:00Z', 'count': 1104}]})
Что показывает, что запросы из Python - это не проблема.