核心查询函数
chdb.query
返回值
以指定的格式返回查询结果:
引发异常
示例
chdb.sql
返回值
按指定格式返回查询结果:
引发异常
示例
chdb.to_arrowTable
返回值
引发的异常
示例
chdb.to_df
返回值
引发异常
示例
连接与会话管理
chdb.connect
基础版格式
带查询参数
查询参数处理
查询参数会作为启动参数传递给 ClickHouse engine。
特殊参数处理如下:
如需完整参数列表,请参见
clickhouse local --help --verbose
返回值
抛出异常
示例
Connection- 数据库连接类Cursor- 用于 DB-API 2.0 操作的数据库游标
异常处理
class chdb.ChdbError
Exception
与 chDB 相关错误的基础异常类。
当 chDB 查询执行失败或发生
错误时,会引发此异常。它继承自标准 Python 的 Exception 类,
并提供来自底层 ClickHouse 引擎的错误信息。
class chdb.session.Session
object
Session 会保留查询状态。
如果 path 为 None,它会创建一个临时目录,并将其用作数据库路径;
当 session 关闭时,该临时目录会被删除。
你也可以传入一个 path,在该 path 创建数据库,数据将保存在那里。
你也可以使用连接字符串传入该 path 和其他参数。
连接字符串参数处理对于包含查询参数的连接字符串,例如 “file:test.db?param1=value1¶m2=value2”,
其中的 “param1=value1” 会作为启动参数传递给 ClickHouse 引擎。更多详情,请参见
clickhouse local –help –verbose一些特殊参数的处理方式:- “mode=ro” 在 clickhouse 中会转换为 “–readonly=1” (只读模式)
cleanup
此方法绝不会抛出异常,因此可安全地在
finally 块或析构函数中调用。
close()- 用于显式关闭会话,并传播错误
close
当会话用作上下文管理器时,
或会话对象被销毁时,此方法会自动调用。
query
返回值
以指定格式返回查询结果。
具体返回类型取决于
fmt 参数:
- String 格式 (CSV、JSON 等) 返回
str - 二进制格式 (Arrow、Parquet) 返回
bytes
不支持 “Debug” 格式,系统会自动将其转换为 “CSV” 并发出警告。
如需调试,请改用 connection string 参数。
send_query()- 用于以流式方式执行查询sql- 该方法的别名
send_query
返回值
抛出异常
不支持 “Debug” 格式,并会在发出警告后自动转换为 “CSV”。
如需调试,请改用 connection string 参数。
query()- 用于执行非流式查询chdb.state.sqlitelike.StreamingResult- 流式结果迭代器
sql
返回值
以指定格式返回查询结果。
具体返回类型取决于
fmt 参数:
- 字符串格式 (CSV、JSON 等) 返回 str
- 二进制格式 (Arrow、Parquet) 返回 bytes
不支持 “Debug” 格式,并会自动将其转换为 “CSV”,同时发出警告。
如需调试,请改用连接字符串参数。
send_query()- 用于流式执行查询sql- 该方法的别名
状态管理
chdb.state.connect
基础格式
支持的连接字符串格式:
带查询参数
查询参数处理
查询参数会作为启动参数传递给 ClickHouse 引擎。
特殊参数处理如下:
完整参数列表请参见
clickhouse local --help --verbose
返回值
抛出异常
示例
Connection- 数据库连接类Cursor- 用于 DB-API 2.0 操作的数据库游标
class chdb.state.sqlitelike.Connection
object
语法
close
此方法是幂等的——多次调用也很安全。
cursor
创建新游标会替换与此连接关联的现有游标。每个连接仅支持一个游标。
Cursor- 数据库游标的实现
query
返回值
引发的异常
示例
send_query()- 用于以流式方式执行查询
send_query
返回
引发
只有 “Arrow” 格式支持对返回的 StreamingResult 调用
record_batch() 方法。query()- 用于执行非流式查询StreamingResult- 流式结果迭代器
class chdb.state.sqlitelike.StreamingResult
object
用于处理大型查询结果的流式结果迭代器。
此类提供迭代器接口,可在不将整个结果集加载到内存中的情况下流式处理查询结果。它支持多种输出格式,并提供用于手动拉取结果和流式传输 PyArrow RecordBatch 的方法。
fetch
示例
cancel
close
cancel() 的别名。用于关闭流式结果迭代器,
并释放相关资源。
语法
record_batch
返回值
该方法仅在流式查询以
format="Arrow" 启动时可用。与其他格式一起使用会引发错误。迭代器协议
上下文管理器协议
类 chdb.state.sqlitelike.Cursor
object
close
此方法具有幂等性——多次调用也是安全的。
连接关闭时,游标也会自动关闭。
column_names
示例
column_types()- 获取列类型信息description- DB-API 2.0 列描述
column_types
示例
column_names()- 获取列名信息description- DB-API 2.0 列说明
commit
ClickHouse 通常会自动提交操作,因此通常无需显式提交。
提供此方法是为了兼容标准的 DB-API 2.0 工作流程。
property description : list
这符合 DB-API 2.0 中对
cursor.description 的规范。
在此实现中,只有前两个元素 (name 和 type_code) 包含有效
数据。column_names()- 仅获取列名column_types()- 仅获取列类型
execute
引发
此方法遵循 DB-API 2.0 中
cursor.execute() 的规范。
执行后,请使用 fetchone()、fetchmany() 或 fetchall()
获取结果。该方法会自动将 ClickHouse 数据类型转换为相应的
Python 类型:
- Int/UInt 类型 → int
- Float 类型 → float
- String/FixedString → str
- DateTime → datetime.datetime
- Date → datetime.date
- Bool → bool
fetchone()- 获取单行fetchmany()- 获取多行fetchall()- 获取所有剩余行
fetchall
示例
fetchone()- 拉取单行数据fetchmany()- 分批拉取多行数据
fetchmany
返回值
此方法遵循 DB-API 2.0 规范。如果结果集已耗尽,返回的行数
会少于 ‘size’。
fetchone()- 拉取单行fetchall()- 拉取所有剩余行
fetchone
此方法遵循 DB-API 2.0 规范。列值会根据
ClickHouse 列类型自动转换为相应的 Python
类型。
fetchmany()- 拉取多行fetchall()- 拉取所有剩余行
chdb.state.sqlitelike
返回值
引发异常
此函数要求同时安装 pyarrow 和 pandas。
可使用以下命令安装:
pip install pyarrow pandaschdb.state.sqlitelike.to_df
返回:
引发
此函数使用多线程将 Arrow 转换为 Pandas,
以提升大型数据集的处理性能。
to_arrowTable()- 用于转换为 PyArrow Table 格式
DataFrame 集成
类 chdb.dataframe.Table
数据库 API (DBAPI) 2.0 接口
- 连接:使用 connection string 管理数据库连接
- 游标:执行查询并获取结果
- 类型系统:符合 DB-API 2.0 规范的类型常量和转换器
- 错误处理:标准的数据库异常层次结构
- 线程安全:1 级线程安全 (线程可共享模块,但不可共享连接)
核心函数
chdb.dbapi.connect
抛出
chdb.dbapi.get_client_info()
类型构造器
chdb.dbapi.Binary(x)
返回值
连接类
类 chdb.dbapi.connections.Connection(path=None)
object
符合 DB-API 2.0 规范的 chDB 数据库连接。
此类提供标准的 DB-API 接口,用于连接到 chDB 数据库并与之交互。它同时支持内存数据库和基于文件的数据库。
该连接管理底层的 chDB engine,并提供用于
执行查询、管理事务 (对 ClickHouse 而言是空操作) 以及创建游标的方法。
变量
示例
ClickHouse 不支持传统事务,因此 commit() 和 rollback()
操作实际上都是空操作,但为了符合 DB-API 规范,仍提供了这两个方法。
close
commit
对于 chDB/ClickHouse,这属于空操作,因为它不支持传统的
事务。提供此项是为了符合 DB-API 2.0 规范。
cursor
返回值
引发
示例
escape
返回值
示例
escape_string
返回值
property open
query
返回值
引发异常
示例
property resp
每次直接调用 query() 时,此属性都会更新。
通过游标执行的查询不会反映在此属性中。
rollback
对于 chDB/ClickHouse,这属于空操作,因为它不支持传统的
事务。提供此项是为了符合 DB-API 2.0 规范。
Cursor 类
class chdb.dbapi.cursors.Cursor
object
用于执行查询并获取结果的 DB-API 2.0 游标。
该游标提供用于执行 SQL 语句、管理查询结果以及浏览结果集的方法。它支持参数绑定、批量操作,
并遵循 DB-API 2.0 规范。
不要直接创建 Cursor 实例。请改用 Connection.cursor()。
示例
完整的规范说明请参见 DB-API 2.0 Cursor Objects。
callproc
返回值
chDB/ClickHouse 并不支持传统意义上的存储过程。
提供此 method 是为了符合 DB-API 2.0 规范,但它实际上
不会执行任何操作。所有 SQL 操作都请使用 execute()。
close
execute
返回值
参数风格
示例
executemany(query, args)
返回值
示例
该方法通过优化查询执行流程,提高多行 INSERT 和 UPDATE 操作的性能。
fetchall()
抛出
示例
fetchmany
返回值
引发异常
示例
fetchone
抛出
示例
max_stmt_length = 1024000
executemany() 生成的最大语句大小。
默认值为 1024000。
mogrify
返回值
示例
此方法遵循 Psycopg 所采用的 DB-API 2.0 扩展规范。
nextset
chDB/ClickHouse 不支持单个查询返回多个结果集。
提供此方法是为了符合 DB-API 2.0 规范,但它始终返回 None。
setinputsizes
此方法不执行任何操作,但 DB-API 2.0 规范要求必须提供该方法。
chDB 会在内部自动处理参数大小。
setoutputsizes
此方法本身不执行任何操作,但 DB-API 2.0 规范要求必须提供。
chDB 会自动在内部处理输出大小。
错误类
这些异常类符合 Python DB API 2.0 规范,
可在不同的数据库操作中提供一致的错误处理。
- Python Database API Specification v2.0
chdb.dbapi.connections- 数据库连接管理chdb.dbapi.cursors- 数据库游标操作
异常 chdb.dbapi.err.DataError
DatabaseError
因处理中的数据存在问题而引发的异常。
当数据库操作因正在处理的数据出现问题而失败时,会引发此异常,例如:
- 除零操作
- 数值超出范围
- 无效的日期/时间值
- 字符串截断错误
- 类型转换失败
- 不符合列类型的数据格式
示例
异常 chdb.dbapi.err.DatabaseError
Error
为与数据库相关的错误而引发的异常。
这是所有数据库相关错误的基类。它涵盖数据库操作期间发生的、
与数据库本身相关而非与接口相关的
所有错误。
常见场景包括:
- SQL 执行错误
- 数据库连接问题
- 与事务相关的问题
- 违反数据库特定约束
这是更具体的数据库错误类型的父类,
例如
DataError、OperationalError 等。异常 chdb.dbapi.err.Error
StandardError
作为所有其他错误异常 (Warning 除外) 的基类异常。
这是 chdb 中所有错误异常的基类,不包括警告。
它是所有会导致操作无法成功完成的数据库错误情况的父类。
此异常层次结构遵循 Python DB API 2.0 规范。
Warning- 用于不会阻止操作完成的非致命警告
异常 chdb.dbapi.err.IntegrityError
DatabaseError
当数据库的关系完整性遭到破坏时引发的异常。
当数据库操作违反完整性约束时,会引发此异常,
包括:
- 违反外键约束
- 违反主键或唯一约束 (键重复)
- 违反检查约束
- 违反 NOT NULL 约束
- 违反参照完整性
示例
异常 chdb.dbapi.err.InterfaceError
Error
当错误与数据库接口而不是数据库本身相关时,会引发此异常。
当数据库接口实现出现问题时,会引发此异常,例如:
- 无效的连接参数
- API 使用不当 (在已关闭的连接上调用方法)
- 接口层协议错误
- 模块导入或初始化失败
这些错误通常属于编程错误或配置问题,
可通过修正客户端代码或配置来解决。
异常 chdb.dbapi.err.InternalError
DatabaseError
当数据库遇到内部错误时引发的异常。
当数据库系统遇到并非由应用程序导致的内部错误时,会引发此异常,例如:
- 游标状态无效 (游标已失效)
- 事务状态不一致 (事务不同步)
- 数据库损坏
- 内部数据结构损坏
- 系统级数据库错误
这些错误通常不在应用程序的控制范围内,可能需要重启数据库或执行修复操作。
异常 chdb.dbapi.err.NotSupportedError
DatabaseError
在某个方法或数据库 API 不受支持时引发的异常。
当应用程序尝试使用当前数据库配置或版本不支持的数据库功能或 API 方法时,会引发此异常,例如:
- 在不支持事务的连接上调用
rollback() - 使用当前数据库版本不支持的高级 SQL 功能
- 调用当前 driver 中未实现的方法
- 尝试使用已禁用的数据库功能
示例
请查阅数据库文档并确认驱动支持的功能,以避免
这些错误。可行时,请考虑采用平稳的回退机制。
异常 chdb.dbapi.err.OperationalError
DatabaseError
因与数据库操作相关的错误而引发的异常。
当数据库操作期间发生错误,
且这些错误不一定在程序员的控制范围内时,会引发此异常,包括:
- 与数据库的连接意外中断
- 找不到数据库服务器或无法连接
- 事务处理失败
- 处理过程中发生内存分配错误
- 磁盘空间不足或资源耗尽
- 数据库服务器内部错误
- 身份验证或授权失败
这些错误通常是暂时性的,可通过重试操作
或解决系统级问题来恢复。
异常 chdb.dbapi.err.ProgrammingError
DatabaseError
在数据库操作中发生编程错误时引发的异常。
当应用程序使用数据库时存在编程错误,就会引发此异常,包括:
- 找不到表或列
- 创建时表或索引已存在
- 语句中的 SQL 语法错误
- 预处理语句中指定的参数个数不正确
- 无效的 SQL 操作 (例如,对不存在的对象执行 DROP)
- 数据库 API 方法使用不当
示例
异常 chdb.dbapi.err.StandardError
Exception
与 chdb 操作相关的异常。
这是所有 chdb 相关异常的基类。它继承自
Python 内置的 Exception 类,并作为数据库操作异常层级结构的根类。
该异常类遵循 Python DB API 2.0 规范,
用于处理数据库异常。
异常 chdb.dbapi.err.Warning
StandardError
在插入过程中发生数据截断等重要警告时引发的异常。
当数据库操作已完成,但伴有
需要提醒应用程序注意的重要警告时,就会引发此异常。
常见场景包括:
- 插入过程中的数据截断
- 数值转换中的精度丢失
- 字符集转换警告
这遵循 Python DB API 2.0 对警告类异常的规范。
模块常量
chdb.dbapi.apilevel = '2.0'
object._\_str_\_() (如果已定义)
或 repr(object) 的结果。
- encoding 默认为‘utf-8’。
- errors 默认为‘strict’。
chdb.dbapi.threadsafety = 1
chdb.dbapi.paramstyle = 'format'
类型常量
chdb.dbapi.STRING = frozenset({247, 253, 254})
chdb.dbapi.BINARY = frozenset({249, 250, 251, 252})
chdb.dbapi.NUMBER = frozenset({0, 1, 3, 4, 5, 8, 9, 13})
chdb.dbapi.DATE = frozenset({10, 14})
chdb.dbapi.TIME = frozenset({11})
chdb.dbapi.TIMESTAMP = frozenset({7, 12})
chdb.dbapi.DATETIME = frozenset({7, 12})
chdb.dbapi.ROWID = frozenset({})
- 连接管理:使用完毕后务必关闭连接和游标
- 上下文管理器:使用
with语句自动清理资源 - 批次处理:对于较大的结果集,使用
fetchmany() - 错误处理:将数据库操作放在 try-except 块中
- 参数绑定:尽可能使用参数化查询
- 内存管理:对于非常大的数据集,避免使用
fetchall()
- chDB 的 DB-API 2.0 接口与大多数 Python 数据库工具兼容
- 该接口提供 Level 1 线程安全 (线程可以共享模块,但不能共享连接)
- 连接字符串支持与 chDB 会话相同的参数
- 支持所有标准的 DB-API 2.0 异常
用户自定义函数 (UDF)
chdb.udf.chdb_udf
注意
- 函数应为无状态。仅支持 UDFs,不支持 UDAFs。
- 默认返回类型为 String。返回类型应为 ClickHouse 数据类型之一。
- 函数应接受 String 类型的参数。所有参数均为字符串。
- 函数会对输入的每一行调用一次。
- 函数应为纯 Python 函数。请导入函数中使用的所有模块。
- 所用的 Python 解释器与运行脚本时使用的解释器相同。
chdb.udf.generate_udf
- 用于处理输入数据的 Python 可执行脚本
- 用于在 ClickHouse 中注册 UDF 的 XML 配置文件
此函数通常由 @chdb_udf 装饰器调用,用户不应直接调用。
工具
chdb.utils.convert_to_columnar
返回值
示例
chdb.utils.flatten_dict
返回值
示例
chdb.utils.infer_data_type
返回值
- 如果列表中的所有值都是 None,函数将返回 “string”。
- 如果列表中的任意值是字符串,函数会立即返回 “string”。
- 该函数假定数值可根据其范围和精度表示为整数、 Decimal 或浮点数。
chdb.utils.infer_data_types
返回值
抽象基类
类 chdb.rwabc.PyReader(data: Any)`
ABC
abstractmethod read
返回值
类 chdb.rwabc.PyWriter
ABC
abstractmethod finalize
abstractmethod write
异常处理
类 chdb.ChdbError
Exception
与 chDB 相关错误的基础异常类。
当 chDB 查询执行失败或发生错误时,会引发此异常。它继承自标准 Python 的 Exception 类,并提供来自底层 ClickHouse engine 的错误信息。
异常消息通常包含来自 ClickHouse 的详细错误信息,包括语法错误、类型不匹配、缺失的表/列,以及其他查询执行问题。
变量
示例
当底层 ClickHouse 引擎报告错误时,chdb.query() 及相关
函数会自动引发此异常。
在处理可能失败的查询时,您应捕获此异常,
以便在应用程序中进行适当的错误处理。
版本信息
chdb.chdb_version = ('3', '6', '0')
chdb.engine_version = '25.5.2.1'
- encoding 默认为 ‘utf-8’。
- errors 默认为 ‘strict’。
chdb.__version__ = '3.6.0'
- encoding 默认为 ‘utf-8’。
- errors 默认为 ‘strict’。