clickhousedb), созданный на базе основного драйвера. Он ориентирован на API SQLAlchemy Core и поддерживает SQLAlchemy 1.4.40+ и 2.0.x.
Подключение через SQLAlchemy
clickhousedb:// или clickhousedb+connect://. Параметры запроса соответствуют настройкам ClickHouse, параметрам клиента и параметрам транспорта HTTP/TLS.
- Настройки ClickHouse: передавайте как параметры запроса (например,
use_skip_indexes=0). - Параметры клиента:
compression(алиас дляcompress),query_limit, тайм-ауты и другое. - Параметры HTTP/TLS: параметры пула HTTP и TLS (например,
ch_http_max_field_name_size=99999,ca_cert=certifi).
Основные запросы
SELECT в SQLAlchemy Core с JOIN, фильтрами, сортировкой, ограничением/смещением и DISTINCT.
DELETE с обязательным условием WHERE:
DDL и рефлексия
clickhousedb_default_type, clickhousedb_codec_expression и clickhousedb_ttl_expression, если они определены на сервере.
Вставка данных (Core и базовый ORM)
Область применения и ограничения
- Основной фокус: поддержка возможностей SQLAlchemy Core, таких как
SELECTсJOIN(INNER,LEFT OUTER,FULL OUTER,CROSS),WHERE,ORDER BY,LIMIT/OFFSETиDISTINCT. - Только
DELETEсWHERE: диалект поддерживает легковесныйDELETE, но требует явного условияWHERE, чтобы избежать случайного удаления всех данных из таблицы. Чтобы очистить таблицу, используйтеTRUNCATE TABLE. - Без
UPDATE: ClickHouse оптимизирован для добавления данных. Диалект не реализуетUPDATE. Если вам нужно изменить данные, выполняйте преобразования выше по конвейеру и вставляйте данные заново либо используйте явный текстовый SQL (например,ALTER TABLE ... UPDATE) на свой страх и риск. - DDL и рефлексия: поддерживаются создание баз данных и таблиц, а рефлексия возвращает типы столбцов и метаданные движка таблицы. Традиционные метаданные PK/FK/индексов отсутствуют, поскольку ClickHouse не применяет такие ограничения.
- Область ORM: для удобства работают декларативные модели и вставки через
Session.add(...)/bulk_save_objects(...). Продвинутые возможности ORM (управление связями, обновления unit-of-work, каскадирование, семантика eager/lazy loading) не поддерживаются. - Семантика primary key:
Column(..., primary_key=True)используется SQLAlchemy только для идентификации объектов. Это не создает серверное ограничение в ClickHouse. ЗадавайтеORDER BY(и необязательныйPRIMARY KEY) через движки таблиц (например,MergeTree(order_by=...)). - Транзакции и возможности сервера: двухфазные транзакции, последовательности,
RETURNINGи продвинутые уровни изоляции не поддерживаются.engine.begin()предоставляет менеджер контекста Python для группировки операторов, но не выполняет фактического управления транзакциями (commit/rollbackне делают ничего).