clickhouse-driver:ClickHouse 的 Python 原生驱动

mymarilyn/clickhouse-driver 是 ClickHouse 的 Python 驱动,基于原生 TCP 协议实现。该项目当前收获了 1,298 个 Star。

正文顶部截图

README区域截图

ClickHouse 是高性能列式数据库,在数据分析场景中使用广泛。HTTP 接口虽然通用,但在某些场景下存在限制。该驱动直接通过 TCP 协议与 ClickHouse 服务端通信,支持更完整的功能集和更优的交互效率。

该驱动的类型系统覆盖较全,基本涵盖了 ClickHouse 的核心数据类型:

  • 数值类型:Float32 / Float64、[U]Int8 / 16 / 32 / 64 / 128 / 256、Decimal
  • 日期时间类型:Date / Date32 / DateTime / DateTime64,支持时区参数
  • 字符串类型:String / FixedString
  • 复合类型:Array(T)、Tuple(T1, T2, …)、Nested、Map(key, value)
  • 特殊类型:Enum8 / Enum16、Nullable(T)、Bool、UUID、IPv4 / IPv6、LowCardinality(T)、SimpleAggregateFunction(F, T)

除基础类型外,项目还提供了一些实用的运行时功能。外部数据查询处理允许在查询中注入外部数据集。查询设置支持动态调整执行参数。数据传输支持压缩和 TLS 加密。查询过程中可获取进度信息,结果以块为单位流式返回,内存占用较低。这些功能对大规模数据查询场景比较实用。

项目还具备读取查询 profile 信息的能力,方便排查性能问题。服务端日志可直接在客户端接收。多主机配置支持故障转移,某个节点不可用时会自动切换到备用节点。

项目兼容 Python DB API 2.0 规范,对习惯标准数据库接口的开发者友好。同时提供可选的 NumPy 数组支持,方便与数据分析工具链集成。异步版本 aioch 在另一个仓库维护。


安装

通过 pip 直接安装:

pip install clickhouse-driver

使用示例

1、Pure Client

直接创建 Client 实例,调用 execute 方法执行 SQL:

from clickhouse_driver import Client

client = Client('localhost')
client.execute('SHOW TABLES')
client.execute('CREATE TABLE test (x Int32) ENGINE = Memory')
client.execute('INSERT INTO test (x) VALUES', [{'x': 100}])
client.execute('SELECT sum(x) FROM test')

支持参数化查询,通过字典传入变量值:

client.execute(
    'INSERT INTO test (x) SELECT * FROM system.numbers LIMIT %(limit)s',
    {'limit': 3}
)

2、DB API

通过 connect 建立连接,使用 cursor 执行操作:

from clickhouse_driver import connect

conn = connect('clickhouse://localhost')
cursor = conn.cursor()
cursor.execute('SHOW TABLES')
cursor.fetchall()
cursor.executemany('INSERT INTO test (x) VALUES', [{'x': 100}])
cursor.execute('SELECT sum(x) FROM test')
cursor.fetchall()

完整文档见 clickhouse-driver.readthedocs.io。

FROM test’)
cursor.fetchall()


完整文档见 clickhouse-driver.readthedocs.io。

更多推荐