Поддержка SQLAlchemy
ClickHouse Connect включает диалект SQLAlchemy (clickhousedb), построенный поверх базового драйвера. Он предназначен для работы с API SQLAlchemy Core и поддерживает версии SQLAlchemy 1.4.40+ и 2.0.x.
Подключение через SQLAlchemy
Создайте движок, используя URL-адрес вида clickhousedb:// или clickhousedb+connect://. Параметры запроса соответствуют настройкам ClickHouse, параметрам клиента и параметрам транспорта HTTP/TLS.
Замечания по параметрам URL/запроса:
- Настройки ClickHouse: передавайте как параметры запроса (например,
use_skip_indexes=0). - Параметры клиента:
compression(псевдонимcompress),query_limit, таймауты и другие параметры. - Параметры HTTP/TLS: параметры для пула HTTP и TLS (например,
ch_http_max_field_name_size=99999,ca_cert=certifi).
Полный список поддерживаемых параметров см. в разделе Connection arguments and Settings ниже. Их также можно передавать через DSN SQLAlchemy.
Основные запросы
Диалект поддерживает SELECT-запросы SQLAlchemy Core с объединениями, фильтрацией, сортировкой, ограничениями и смещениями (LIMIT/OFFSET), а также DISTINCT.
Поддерживается легковесный DELETE с обязательным условием WHERE:
DDL и рефлексия
Вы можете создавать базы данных и таблицы, используя предоставленные DDL‑помощники и конструкторы типов/движков. Поддерживается рефлексия таблиц (включая типы столбцов и движок).
Отражённые столбцы включают атрибуты, специфичные для диалекта, такие как clickhousedb_default_type, clickhousedb_codec_expression и clickhousedb_ttl_expression, если они заданы на сервере.
Операции вставки (Core и базовый ORM)
Операции вставки можно выполнять через SQLAlchemy 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 загрузки) не поддерживаются. - Семантика первичного ключа:
Column(..., primary_key=True)используется SQLAlchemy только для идентификации объектов. Это не создаёт серверного ограничения в ClickHouse. ОпределяйтеORDER BY(и необязательныйPRIMARY KEY) через движки таблиц (например,MergeTree(order_by=...)). - Транзакции и функции сервера: Двухфазные транзакции, последовательности,
RETURNINGи расширенные уровни изоляции не поддерживаются.engine.begin()предоставляет контекстный менеджер Python для группировки выражений, но не выполняет реального управления транзакциями (commit/rollback фактически ничего не делают).