跳转到主要内容
ClickHouse Connect 内置了一个基于核心驱动构建的 SQLAlchemy 方言 (clickhousedb) 。它面向 SQLAlchemy Core API,支持 SQLAlchemy 1.4.40+ 和 2.0.x。

通过 SQLAlchemy 连接

使用 clickhousedb://clickhousedb+connect:// URL 创建引擎。查询参数会映射为 ClickHouse 设置、客户端选项以及 HTTP/TLS 传输选项。
关于 URL/查询参数的说明:
  • ClickHouse 设置:作为查询参数传入 (例如,use_skip_indexes=0) 。
  • 客户端选项:compression (compress 的别名) 、query_limit、超时等。
  • HTTP/TLS 选项:用于 HTTP 连接池和 TLS 的选项 (例如,ch_http_max_field_name_size=99999ca_cert=certifi) 。
如需查看受支持选项的完整列表,请参阅下方各节中的 连接参数和设置。这些选项也可以通过 SQLAlchemy DSN 传入。

Core 查询

该方言支持 SQLAlchemy Core SELECT 查询,可使用 JOIN、过滤器、排序、LIMIT/OFFSET 以及 DISTINCT
支持必须带有 WHERE 子句的轻量级 DELETE

DDL 和反射

你可以使用提供的 DDL 辅助工具以及 type/引擎 构造来创建数据库和表。支持表反射 (包括列类型和 引擎) 。
反映出的列会在服务器上存在相关信息时,包含方言特有的属性,例如 clickhousedb_default_typeclickhousedb_codec_expressionclickhousedb_ttl_expression

插入 (Core 和基本 ORM)

为了方便起见,既可以通过 SQLAlchemy Core 进行插入,也可以使用简单的 ORM 模型。

范围与限制

  • 核心关注点:支持 SQLAlchemy Core 功能,例如带 JOIN (INNERLEFT OUTERFULL OUTERCROSS) 的 SELECT,以及 WHEREORDER BYLIMIT/OFFSETDISTINCT
  • 仅支持带 WHEREDELETE:该方言支持 轻量级 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 均为空操作) 。
最后修改于 2026年6月19日