Как создать смешивание строк "и" в python для выполнения запроса на infxdb?

Я пытаюсь написать следующее строковое предложение, чтобы сделать запрос о притоке db:

query=SELECT FIRST("price") ,LAST("price") ,MAX("price") ,MIN("price") ,SUM("amount") FROM "table name" WHERE time >= '2018-05-10T12:02:00Z' AND time <= '2018-06-10T12:03:00Z' GROUP BY time(1h)

Однако, поскольку он смешивает "и" в одной строке, я не смог правильно выполнить синтаксический анализ в python.

Когда я пытаюсь:

query='SELECT FIRST("price") ,LAST("price") ,MAX("price") ,MIN("price") ,SUM("amount") FROM "table name" WHERE time >= '2018-05-10T12:02:00Z' AND time <= '2018-06-10T12:03:00Z' GROUP BY time(1h)'

Он говорит о недопустимом синтаксисе из-за 'до даты, закрывающей строку. Я также пытаюсь удалить или просто поставить "вместо", но это не сработало. Наконец, я попробовал что-то более грязное:

query='SELECT FIRST("price") ,LAST("price") ,MAX("price") ,MIN("price") ,SUM("amount") FROM 'tablename' WHERE time >='+"'2018-05-10T12:02:00Z'"+' AND time <= '+"'2018-06-10T12:03:00Z'"+'GROUP BY time(1h)'

но я получил пустой запрос. Я ценю любую помощь с этим, спасибо.

0
0
199
1

Ответы 1

Если вам нужен буквальный ' в строке, а строковый литерал использует ', вы должны экранировать ' с помощью \. То же самое и с ". Используйте ваш второй пример, но поместите \ перед всеми вашими внутренними '.

query='SELECT FIRST("price") ,LAST("price") ,MAX("price") ,MIN("price") ,SUM("amount") FROM "table name" WHERE time >= \'2018-05-10T12:02:00Z\' AND time <= \'2018-06-10T12:03:00Z\' GROUP BY time(1h)'

Другой способ, который дает дополнительное преимущество, делая ваш код более читабельным, - использовать многострочный строковый синтаксис Python, состоящий из трех одинарных или двойных кавычек.

query='''SELECT FIRST("price") 
               ,LAST("price") 
               ,MAX("price") 
               ,MIN("price") 
               ,SUM("amount") 
          FROM "table name" 
          WHERE time >= '2018-05-10T12:02:00Z' 
          AND time <= '2018-06-10T12:03:00Z' 
          GROUP BY time(1h)'''

Другие вопросы по теме