Перейти к основному содержанию
Для большинства методов API рекомендуется использовать именованные аргументы, поскольку возможных аргументов много и большинство из них необязательны.Методы, не описанные здесь, не считаются частью API и могут быть удалены или изменены.

Инициализация клиента

Класс clickhouse_connect.driver.client предоставляет основной интерфейс между приложением Python и сервером базы данных ClickHouse. Чтобы получить экземпляр Client, используйте функцию clickhouse_connect.get_client, которая принимает следующие аргументы:

Аргументы подключения

Аргументы HTTPS/TLS

Аргумент settings

Наконец, аргумент settings для get_client используется для передачи серверу дополнительных настроек ClickHouse с каждым клиентским запросом. Обратите внимание, что в большинстве случаев пользователи с доступом readonly=1 не могут изменять настройки, передаваемые вместе с запросом, поэтому ClickHouse Connect отбрасывает такие настройки в итоговом запросе и записывает предупреждение в журнал. Следующие настройки применяются только к HTTP-запросам/сеансам, используемым ClickHouse Connect, и не документированы как общие настройки ClickHouse. О других настройках ClickHouse, которые можно передавать с каждым запросом, см. в документации ClickHouse.

Примеры создания клиента

  • Без параметров клиент ClickHouse Connect подключится к HTTP-порту по умолчанию на localhost с пользователем по умолчанию default и без пароля:
  • Подключение к защищённому (HTTPS) внешнему серверу ClickHouse
  • Подключение с идентификатором сеанса, а также с другими пользовательскими параметрами подключения и настройками ClickHouse.

Жизненный цикл клиента и рекомендации

Создание клиента ClickHouse Connect — ресурсоемкая операция, включающая установление соединения, получение метаданных сервера и инициализацию настроек. Следуйте этим рекомендациям для оптимальной производительности:

Основные принципы

  • Повторно используйте клиенты: Создавайте клиенты один раз при запуске приложения и используйте их повторно в течение всего жизненного цикла приложения
  • Избегайте частого создания: Не создавайте новый клиент для каждого запроса или обращения (это отнимает сотни миллисекунд на каждую операцию)
  • Корректно освобождайте ресурсы: Всегда закрывайте клиенты при завершении работы, чтобы освободить ресурсы пула соединений
  • По возможности используйте совместно: Один клиент может обрабатывать множество параллельных запросов через свой пул соединений (см. примечания о потоках ниже)

Основные рекомендации

✅ Хорошо: повторно используйте один экземпляр клиента
❌ Плохо: повторное создание клиентов

Многопоточные приложения

Экземпляры клиента НЕ являются потокобезопасными при использовании идентификаторов сеанса. По умолчанию клиентам назначается автоматически сгенерированный идентификатор сеанса, и параллельные запросы в рамках одного сеанса приведут к ProgrammingError.
Чтобы безопасно использовать один клиент в нескольких потоках:
Альтернатива при использовании сеансов: Если вам нужны сеансы (например, для временных таблиц), создайте отдельный клиент для каждого потока:

Правильная очистка

Всегда закрывайте клиенты при завершении работы. Обратите внимание: client.close() освобождает клиент и закрывает HTTP-соединения из пула только в том случае, если клиент управляет собственным менеджером пула (например, если он создан с пользовательскими параметрами TLS/прокси). Для общего пула по умолчанию используйте client.close_connections(), чтобы принудительно очистить сокеты; в противном случае соединения будут автоматически освобождены по истечении периода бездействия и при завершении процесса.
Или используйте контекстный менеджер:

Когда использовать несколько клиентов

Несколько клиентов уместны в следующих случаях:
  • Разные серверы: один клиент на каждый сервер ClickHouse или кластер
  • Разные учетные данные: отдельные клиенты для разных пользователей или уровней доступа
  • Разные базы данных: когда нужно работать с несколькими базами данных
  • Изолированные сеансы: когда нужны отдельные сеансы для временных таблиц или настроек, специфичных для сеанса
  • Изоляция на уровне потоков: когда потокам нужны независимые сеансы (как показано выше)

Общие аргументы методов

В некоторых методах клиента используются один или оба стандартных именованных аргумента: parameters и settings. Они описаны ниже.

Аргумент parameters

Методы query* и command клиента ClickHouse Connect принимают необязательный именованный аргумент parameters, который используется для привязки выражений Python к выражению значения в ClickHouse. Доступны два типа привязки.

Привязка на стороне сервера

ClickHouse поддерживает привязку на стороне сервера для большинства значений в запросах: привязанное значение передаётся отдельно от самого запроса как параметр HTTP-запроса. ClickHouse Connect добавляет соответствующие параметры запроса, если обнаруживает выражение привязки вида {<name>:<datatype>}. При использовании привязки на стороне сервера аргумент parameters должен быть словарём Python.
  • Привязка на стороне сервера со словарём Python, значением DateTime и строковым значением
При этом на сервере формируется следующий запрос:
Привязка на стороне сервера поддерживается (сервером ClickHouse) только для запросов SELECT. Она не работает с запросами ALTER, DELETE, INSERT и другими типами запросов. В будущем это может измениться; см. https://github.com/ClickHouse/ClickHouse/issues/42092.

Привязка на стороне клиента

ClickHouse Connect также поддерживает привязку параметров на стороне клиента, что дает больше гибкости при формировании шаблонизированных SQL-запросов. Для привязки на стороне клиента аргумент parameters должен быть словарём или последовательностью. При привязке на стороне клиента для подстановки параметров используется форматирование строк Python в стиле “printf”. Обратите внимание: в отличие от привязки на стороне сервера, привязка на стороне клиента не работает с идентификаторами баз данных, таблиц и столбцов, поскольку форматирование в стиле Python не различает разные типы строк, а для них требуется разное оформление (обратные кавычки или двойные кавычки для идентификаторов базы данных и одинарные кавычки для значений данных).
  • Пример с Python-словарём, значением DateTime и экранированием строк
В результате на сервере формируется следующий запрос:
  • Пример с последовательностью Python Sequence (Tuple), Float64 и IPv4Address
В результате на сервере формируется следующий запрос:
Для привязки аргументов DateTime64 (типов ClickHouse с точностью до долей секунды) требуется использовать один из двух специальных подходов:
  • Оберните значение Python datetime.datetime в новый класс DT64Param, например:
    • Если используется словарь значений параметров, добавьте суффикс _64 к имени параметра

Аргумент Settings

Все основные методы клиента ClickHouse Connect — “insert” и “select” — принимают необязательный именованный аргумент settings, который позволяет передавать пользовательские настройки сервера ClickHouse для данного SQL-оператора. Аргумент settings должен быть словарём. Каждый элемент должен содержать имя настройки ClickHouse и соответствующее ей значение. Обратите внимание, что при отправке на сервер в качестве параметров запроса значения будут преобразованы в строки. Как и в случае с настройками на уровне клиента, ClickHouse Connect отбрасывает любые настройки, которые сервер помечает как readonly=1, с соответствующим сообщением в журнале. Настройки, применимые только к запросам через HTTP-интерфейс ClickHouse, всегда допустимы. Эти настройки описаны в API get_client. Пример использования настроек ClickHouse:

Метод command клиента

Используйте метод Client.command, чтобы отправлять SQL-запросы на сервер ClickHouse, которые обычно не возвращают данные или возвращают одно примитивное значение либо массив вместо полного набора данных. Этот метод принимает следующие параметры:

Примеры команд

DDL-операторы

Простые запросы, возвращающие одиночные значения

Команды с параметрами

Команды с настройками

Метод query клиента

Метод Client.query — основной способ получить с сервера ClickHouse один датасет в виде «батча». Он использует нативный формат ClickHouse поверх HTTP для эффективной передачи больших наборов данных (примерно до одного миллиона строк). Этот метод принимает следующие параметры:

Примеры запросов

Простой запрос

Доступ к результатам запроса

Запрос с параметрами на стороне клиента

Запрос с параметрами на стороне сервера

Запрос с настройками

Объект QueryResult

Базовый метод query возвращает объект QueryResult со следующими публичными свойствами:
  • result_rows — Матрица возвращённых данных в виде последовательности строк, где каждый элемент строки представляет собой последовательность значений столбцов.
  • result_columns — Матрица возвращённых данных в виде последовательности столбцов, где каждый элемент столбца представляет собой последовательность значений строк для этого столбца
  • column_names — Кортеж строк, содержащий имена столбцов в result_set
  • column_types — Кортеж экземпляров ClickHouseType, представляющих тип данных ClickHouse для каждого столбца в result_columns
  • query_idquery_id запроса к ClickHouse (полезно для анализа запроса в таблице system.query_log)
  • summary — Любые данные, возвращённые в заголовке HTTP-ответа X-ClickHouse-Summary
  • first_item — Вспомогательное свойство для получения первой строки ответа в виде словаря (ключи — имена столбцов)
  • first_row — Вспомогательное свойство, возвращающее первую строку результата
  • column_block_stream — Генератор результатов запроса в столбцово-ориентированном формате. К этому свойству не следует обращаться напрямую (см. ниже).
  • row_block_stream — Генератор результатов запроса в построчно-ориентированном формате. К этому свойству не следует обращаться напрямую (см. ниже).
  • rows_stream — Генератор результатов запроса, который возвращает по одной строке за вызов. К этому свойству не следует обращаться напрямую (см. ниже).
  • summary — Как описано для метода command, словарь со сводной информацией, возвращаемой ClickHouse
Свойства *_stream возвращают объект Python Context, который можно использовать как итератор для возвращённых данных. Обращаться к ним следует только косвенно, используя методы *_stream клиента Client. Подробное описание стриминга результатов запроса (с использованием объектов StreamContext) приведено в разделе Расширенные запросы (потоковый запрос).

Получение результатов запросов с помощью NumPy, Pandas или Arrow

ClickHouse Connect предоставляет специализированные методы запросов для форматов данных NumPy, Pandas и Arrow. Подробную информацию об использовании этих методов, включая примеры, возможности стриминга и расширенную обработку типов, см. в разделе Расширенное выполнение запросов (запросы NumPy, Pandas и Arrow).

Методы потокового выполнения запросов в клиенте

Для потоковой передачи больших результирующих наборов ClickHouse Connect предоставляет несколько методов. Подробности и примеры см. в разделе Расширенные запросы (потоковые запросы).

Метод клиента insert

Для типичного сценария вставки нескольких записей в ClickHouse предусмотрен метод Client.insert. Он принимает следующие параметры: Этот метод возвращает словарь со «сводкой запроса», как описано для метода command. Если вставка завершится ошибкой по любой причине, будет вызвано исключение. Описание специализированных методов вставки, работающих с Pandas DataFrames, PyArrow Tables и DataFrames на базе Arrow, см. в разделе Расширенная вставка (Специализированные методы вставки).
Массив NumPy является допустимым Sequence of Sequences и может использоваться как аргумент data для основного метода insert, поэтому специализированный метод не требуется.

Примеры

В примерах ниже предполагается наличие таблицы users со схемой (id UInt32, name String, age UInt8).

Базовая построчная вставка

Вставка в столбцовом формате

Вставка с явным указанием типов столбцов

Вставка в определённую базу данных

Вставка из файлов

Чтобы напрямую вставлять данные из файлов в таблицы ClickHouse, см. Расширенная вставка (вставка из файлов).

Raw API

Для продвинутых сценариев, требующих прямого доступа к HTTP-интерфейсам ClickHouse без преобразования типов, см. Расширенное использование (Raw API).

Вспомогательные классы и функции

Следующие классы и функции также считаются частью «публичного» API clickhouse-connect и, как и классы и методы, описанные выше, остаются стабильными в рамках минорных релизов. Несовместимые изменения в этих классах и функциях будут вноситься только в минорных (а не патч-) релизах, при этом они как минимум в течение одного минорного релиза будут иметь статус устаревших.

Исключения

Все пользовательские исключения (включая исключения, определённые в спецификации DB API 2.0) объявлены в модуле clickhouse_connect.driver.exceptions. Исключения, которые фактически обнаруживает драйвер, будут относиться к одному из этих типов.

Утилиты ClickHouse SQL

Функции и класс DT64Param в модуле clickhouse_connect.driver.binding можно использовать для корректного формирования и экранирования запросов ClickHouse SQL. Аналогично, функции из модуля clickhouse_connect.driver.parser можно использовать для разбора названий типов данных ClickHouse.

Многопоточные, многопроцессные и асинхронные/событийно-ориентированные сценарии использования

Подробнее об использовании ClickHouse Connect в многопоточных, многопроцессных и асинхронных/событийно-ориентированных приложениях см. в разделе Расширенное использование (многопоточные, многопроцессные и асинхронные/событийно-ориентированные сценарии использования).

Обёртка AsyncClient

Сведения об использовании обёртки AsyncClient в средах asyncio см. в разделе Расширенное использование (обёртка AsyncClient).

Управление идентификаторами сеансов ClickHouse

Сведения об управлении идентификаторами сеансов ClickHouse в многопоточных или параллельно работающих приложениях см. в разделе Расширенное использование (Управление идентификаторами сеансов ClickHouse).

Настройка пула HTTP-соединений

Сведения о настройке пула HTTP-соединений для крупных многопоточных приложений см. в разделе Расширенное использование (настройка пула HTTP-соединений).
Последнее изменение 12 июня 2026 г.