clickhousedb) 。它面向 SQLAlchemy Core API,支持 SQLAlchemy 1.4.40+ 和 2.0.x。
通过 SQLAlchemy 连接
clickhousedb:// 或 clickhousedb+connect:// URL 创建引擎。查询参数会映射为 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) 。
Core 查询
SELECT 查询,可使用 JOIN、过滤器、排序、LIMIT/OFFSET 以及 DISTINCT。
WHERE 子句的轻量级 DELETE:
DDL 和反射
clickhousedb_default_type、clickhousedb_codec_expression 和 clickhousedb_ttl_expression。
插入 (Core 和基本 ORM)
范围与限制
- 核心关注点:支持 SQLAlchemy Core 功能,例如带
JOIN(INNER、LEFT OUTER、FULL OUTER、CROSS) 的SELECT,以及WHERE、ORDER BY、LIMIT/OFFSET和DISTINCT。 - 仅支持带
WHERE的DELETE:该方言支持 轻量级DELETE,但要求显式指定WHERE子句,以避免误删整张表。如需清空表,请使用TRUNCATE TABLE。 - 不支持
UPDATE:ClickHouse 针对追加写入进行了优化。该方言未实现UPDATE。如果需要修改数据,请在上游完成转换后重新插入,或自行承担风险使用显式文本 SQL (例如ALTER TABLE ... UPDATE) 。 - DDL 和反射:支持创建数据库和表,反射会返回列类型和表引擎元数据。传统的主键/外键/索引元数据不存在,因为 ClickHouse 不会强制执行这些约束。
- ORM 范围:为方便起见,支持声明式模型以及通过
Session.add(...)/bulk_save_objects(...)进行插入。不支持高级 ORM 功能 (关系管理、工作单元更新、级联、预加载/懒加载语义) 。 - 主键语义:SQLAlchemy 中的
Column(..., primary_key=True)仅用于对象标识,不会在 ClickHouse 中创建服务端约束。请通过表引擎定义ORDER BY(以及可选的PRIMARY KEY) (例如MergeTree(order_by=...)) 。 - 事务和服务端功能:不支持两阶段事务、序列、
RETURNING和高级隔离级别。engine.begin()提供了一个用于将语句分组的 Python 上下文管理器,但不会执行任何实际的事务控制 (commit/rollback 均为空操作) 。