Что не так в запросе sql?
Написал следующий sql запрос к бд clickhouse, но получаю следующую ошибку:
clickhouse_driver.errors.ServerException: Code: 62.
DB::Exception: Syntax error: failed at position 82 ('f8e26d5aae7e6e40'): f8e26d5aae7e6e40. Expected one of: token, Dot, UUID, DoubleColon, MOD, DIV, NOT, BETWEEN, LIKE, ILIKE, NOT LIKE, NOT ILIKE, IN, NOT IN, GLOBAL IN, GLOBAL NOT IN, IS, AND, OR, QuestionMark, alias, AS, GROUP BY, WITH, HAVING, WINDOW, ORDER BY, LIMIT, OFFSET, SETTINGS, UNION, EXCEPT, INTERSECT, INTO OUTFILE, FORMAT, end of query. Stack trace:
Вот запрос:
count_lines = self.client.execute('SELECT COUNT(DISTINCT client_id) as'
' con FROM {} WHERE client_id = {}'.format(table_name, tags[0][0]))
где tags[0][0] = 'mc2-node1 f8e26d5aae7e6e40'
Что в нем не так?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Лучше всего передавать параметры в SQL запросы вот этим способом. Но я всё же хочу показать, почему не работает ваш код.
Давайте посмотрим, какой же формируется у вас запрос:
tags = 'mc2-node1 f8e26d5aae7e6e40'
table_name = 'table'
sql = 'SELECT COUNT(DISTINCT client_id) as'
' con FROM {} WHERE client_id = {}'.format(table_name, tags)
print(sql)
Вывод:
SELECT COUNT(DISTINCT client_id) as
^^^^^^^^^ но где же остальная строка?!
Строка просто обрывается, и то, что вы пишете на следующей строке - это отдельная строка, а не продолжение предыдущей строки. Исправим это:
sql = 'SELECT COUNT(DISTINCT client_id) as' +\ # <-- теперь строка продолжается
' con FROM {} WHERE client_id = {}'.format(table_name, tags)
Вывод:
SELECT COUNT(DISTINCT client_id) as con FROM table WHERE client_id = mc2-node1 f8e26d5aae7e6e40
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Уже лучше, но client_id явно нужно брать в кавычки. Итого код у вас должен быть видимо такой, чтобы не было ошибок:
count_lines = self.client.execute('SELECT COUNT(DISTINCT client_id) as' +\
' con FROM {} WHERE client_id = \'{}\''.format(table_name, tags[0][0]))