Skip to main content
Передавайте именованные аргументы в фабрики client и методы со множеством необязательных параметров.Методы, не описанные здесь, не считаются частью API и могут быть удалены или изменены.

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

Используйте clickhouse_connect.get_client, чтобы создать синхронный Client, или установите дополнительный пакет async и вызовите clickhouse_connect.get_async_client с await, чтобы создать нативный AsyncClient.

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

Асинхронная фабрика также принимает connector_limit=100, connector_limit_per_host=20 и keepalive_timeout=30.0 для настройки пула соединений aiohttp. Она не принимает pool_mgr. Синхронное backend-соединение chDB принимает path и chdb_options; см. Встроенное backend-соединение chDB.

Аргументы 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.

Встроенное backend-соединение chDB

Установите clickhouse-connect[chdb], чтобы использовать экспериментальное backend-соединение chDB, работающее в процессе приложения. Оно предоставляет синхронные методы клиента: запросы, вставка, стриминг и методы Arrow:
По умолчанию используется база данных в оперативной памяти. Передайте path="/data/my_chdb" или используйте dsn="chdb:///data/my_chdb" для постоянного хранения данных. Это backend-соединение поддерживает только один путь к движку на процесс и не поддерживает get_async_client или внешние данные.

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

Создание клиента 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>}. Передавайте значения в виде словаря Python. Используйте Python None для допускающих NULL значений. Вложенные значения None поддерживаются внутри параметров Array и Tuple, а также внутри литералов Map, когда dict_parameter_format имеет значение "map".
  • Привязка на стороне сервера со словарём Python, значением DateTime и строковым значением
Это эквивалентно:
Привязка на стороне сервера поддерживается для запросов SELECT. Она не работает с ALTER, DELETE, INSERT и другими типами операторов.

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

ClickHouse Connect также поддерживает привязку параметров на стороне клиента, что дает больше гибкости при формировании шаблонизированных SQL-запросов. Для привязки на стороне клиента аргумент parameters должен быть словарём или последовательностью. При привязке на стороне клиента для подстановки параметров используется форматирование строк Python в стиле “printf”. Обратите внимание: в отличие от привязки на стороне сервера, привязка на стороне клиента не работает с идентификаторами баз данных, таблиц и столбцов, поскольку форматирование в стиле Python не различает разные типы строк, а для них требуется разное оформление (обратные кавычки или двойные кавычки для идентификаторов базы данных и одинарные кавычки для значений данных).
  • Пример с Python-словарём, значением DateTime и экранированием строк
В результате на сервере формируется следующий запрос:
  • Пример с последовательностью Python Sequence (Tuple), Float64 и IPv4Address
В результате на сервере формируется следующий запрос:
При привязке значения datetime без часового пояса интерпретируются как календарное время. Клиент форматирует datetime без часового пояса дословно. ClickHouse интерпретирует его в часовом поясе, объявленном в заполнителе на стороне сервера, например {dt:DateTime('Europe/Berlin')}, затем в session_timezone, если он задан, и наконец в часовом поясе сервера. datetime с часовым поясом преобразуется в часовой пояс, объявленный в заполнителе, если он указан, иначе — в часовой пояс сервера, полученный при подключении. Если настройка session_timezone отличается от полученного часового пояса сервера, укажите часовой пояс в заполнителе, чтобы сохранить нужный момент времени для значений с часовым поясом.Для временной совместимости с прежним преобразованием в локальный часовой пояс хоста задайте common.set_setting("naive_datetime_binding", "legacy") перед привязкой параметров. Чтобы сохранить момент времени, добавьте нужный tzinfo к значению datetime перед передачей его в качестве параметра. Вставки через client.insert по умолчанию интерпретируют значения datetime без часового пояса в локальном часовом поясе процесса. Задайте глобальную настройку naive_datetime_insert в значение "server", чтобы интерпретировать их как календарное время в часовом поясе столбца или в часовом поясе сервера, если у столбца он не задан. См. Объекты datetime без часового пояса.Для заполнителя {value:DateTime64(precision)} на стороне сервера объявленный тип автоматически сохраняет точность до долей секунды, в том числе внутри подсказок Array и Tuple.Привязка %s на стороне клиента не имеет объявленного типа. Оберните datetime в DT64Param, если его нужно выводить с точностью до долей секунды:
Для обратной совместимости имя параметра в словаре, оканчивающееся на _64, также включает форматирование DateTime64, если точное имя с этим суффиксом отсутствует в запросе.Параметры datetime.time и datetime.timedelta форматируются как литерал [-]HH:MM:SS[.ffffff] для столбцов ClickHouse Time и Time64 в обоих стилях привязки и внутри значений Array и Tuple. Кавычки добавляет клиент, поэтому не заключайте заполнитель в кавычки в запросе. Значение timedelta может быть отрицательным и превышать 24 часа. Timedelta из pandas сохраняет наносекунды и форматирует дробную часть из девяти цифр для Time64(9). Информация о часовом поясе в значении time с часовым поясом игнорируется, поскольку тип ClickHouse Time не поддерживает часовые пояса.

аргумент settings

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

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

Используйте Client.command для операторов, которые не возвращают табличный набор данных, или для запросов, которые возвращают одно примитивное значение или одну строку. В зависимости от ответа метод возвращает строку, целое число, последовательность строк или QuerySummary. Если чтение даёт пустой результирующий набор, возвращается пустая строка.

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

DDL-операторы

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

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

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

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

Client.query получает табличный набор данных в Native format ClickHouse и возвращает QueryResult. Полный результат материализуется при обращении к его свойству. Для результатов, которые не следует хранить в памяти, используйте стриминговый метод.

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

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

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

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

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

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

Объект QueryResult

Базовый метод query возвращает объект QueryResult со следующими публичными свойствами:
  • result_rows — Матрица результатов, представленная в виде строк.
  • result_columns — Матрица результатов, представленная в виде столбцов.
  • result_setresult_rows или result_columns в зависимости от ориентации запроса.
  • column_names — Кортеж имен столбцов результата.
  • column_types — Кортеж объектов ClickHouseType.
  • row_count — Количество материализованных строк результата.
  • query_id — Query id, указанный или сгенерированный для этого запроса. Пустая строка означает, что он недоступен.
  • summary — Словарь, декодированный из заголовка ответа X-ClickHouse-Summary.
  • first_item — Первая строка в виде словаря или None для пустого результата.
  • first_row — Первая строка в виде последовательности или None для пустого результата.
  • column_block_stream, row_block_stream и rows_stream — Внутренние контексты потоков. Вместо них используйте соответствующие стриминговые методы клиента.
См. Стриминговые запросы, чтобы узнать о поддерживаемых API StreamContext.

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

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

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

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

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

Для типичного сценария вставки нескольких записей в ClickHouse предусмотрен метод Client.insert. Он принимает следующие параметры: Этот метод возвращает QuerySummary. Его словарь summary содержит значения, сообщаемые сервером. written_rows — это удобное свойство, а written_bytes() и query_id() возвращают соответствующие значения. При ошибке вставки будет вызвано исключение. Описание специализированных методов вставки, работающих с 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).

Python DB-API 2.0

Модуль clickhouse_connect.dbapi реализует интерфейсы connection и cursor, определённые в PEP 249. Он объявляет уровень API 2.0, threadsafety=2 и paramstyle="pyformat". Модуль также предоставляет конструкторы типов PEP 249 Date, Time, Timestamp и Binary, а также функции DateFromTicks, TimeFromTicks и TimestampFromTicks.
Cursor.execute и Cursor.executemany принимают дополнительные именованные аргументы settings и query_formats. settings передаёт настройки ClickHouse. query_formats применяет форматы чтения по типам ClickHouse, когда оператор возвращает строки, используя то же сопоставление, что и Client.query. executemany использует реализованный в драйвере механизм массовой вставки Native для совместимых операторов INSERT ... VALUES с материализованной последовательностью строк. fetchone, fetchmany и fetchall считывают текущий материализованный результат. Cursor.description определяет null_ok по типу каждого столбца результата. Типы, не допускающие NULL, возвращают False, а допускающие NULL — True, включая обёртки Nullable, Variant и Dynamic. None означает, что допустимость NULL неизвестна. Если запрос, начинающийся с SELECT или WITH без учёта начальных комментариев, не возвращает строк и метаданных столбцов, курсор выполняет запрос метаданных с LIMIT 0, чтобы заполнить description. Если этот запрос метаданных завершается с ошибкой, description остаётся пустым. ClickHouse не поддерживает традиционные транзакции через этот HTTP-интерфейс. Connection.commit() и Connection.rollback() не выполняют никаких действий. Правила параллелизма для идентификатора сеанса по-прежнему действуют, если соединение используется совместно.

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

Следующие модули предоставляют дополнительные общедоступные вспомогательные средства, используемые клиентскими приложениями. Версия установленного пакета доступна как строка clickhouse_connect.__version__.

Исключения

Пользовательские исключения, включая иерархию исключений DB-API 2.0, определены в clickhouse_connect.driver.exceptions. DatabaseError и OperationalError предоставляют числовой атрибут code с кодом ошибки ClickHouse и атрибут name с символьным именем, например UNKNOWN_TABLE, поэтому приложения могут строить логику на основе exc.code, а не разбирать сообщение. code задается, даже если show_clickhouse_errors отключен, тогда как для name требуется отображение подробностей ошибки (True или "scrub"). Оба имеют значение None, когда недоступны, например при ошибках передачи данных. Используйте show_clickhouse_errors="scrub", когда конечные пользователи должны видеть ошибки SQL без информации о хосте или версии сервера. Этот параметр также управляет сообщениями StreamFailureError в процессе потоковой передачи и общими сообщениями об ошибках передачи данных. Он влияет только на str(exc). Ошибки передачи данных по-прежнему прикрепляются как __cause__, а трассировки стека могут содержать исходные сведения о хосте, URL или текст ошибки библиотеки.

Утилиты 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-соединений).
Последнее изменение 14 августа 2026 г.