跳转到主要内容

核心查询函数

chdb.query

使用 chDB 引擎执行 SQL 查询。 这是主要的查询函数,使用嵌入式 ClickHouse 引擎执行 SQL 语句。支持多种输出格式,并且可用于内存数据库 或基于文件的数据库。 语法
参数 返回值 以指定的格式返回查询结果: 引发异常 示例

chdb.sql

使用 chDB 引擎执行 SQL 查询。 这是主要的查询函数,使用嵌入式 ClickHouse 引擎执行 SQL 语句。支持多种输出格式,并且可用于内存 或文件数据库。 语法
参数 返回值 按指定格式返回查询结果: 引发异常 示例

chdb.to_arrowTable

将查询结果转换为 PyArrow 表。 将 chDB 的查询结果转换为 PyArrow 表,以高效处理列式数据。 如果结果为空,则返回空表。 语法
参数 返回值 引发的异常 示例

chdb.to_df

将查询结果转换为 pandas DataFrame。 先将 chDB 的查询结果转换为 PyArrow Table,再使用多线程将其转换为 pandas,以提升性能。 语法
参数 返回值 引发异常 示例

连接与会话管理

可使用以下会话函数:

chdb.connect

创建到 chDB 后台 server 的连接。 此函数会建立一个到 chDB (ClickHouse) database engine 的 Connection。 每个进程只允许存在一个打开的连接。 使用相同连接字符串的多次调用将返回同一个 connection object。
参数: 基础版格式 带查询参数 查询参数处理 查询参数会作为启动参数传递给 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&param2=value2”, 其中的 “param1=value1” 会作为启动参数传递给 ClickHouse 引擎。更多详情,请参见 clickhouse local –help –verbose一些特殊参数的处理方式:
  • “mode=ro” 在 clickhouse 中会转换为 “–readonly=1” (只读模式)
重要
  • 同一时间只能有一个会话。如果要创建新会话,需要先关闭现有会话。
  • 创建新会话会关闭现有会话。

cleanup

在处理异常时清理会话资源。 此方法会尝试关闭会话,同时抑制清理过程中可能发生的任何异常。在异常处理场景中,或者当你需要确保无论会话处于何种状态都能执行清理时,它尤其有用。 语法
此方法绝不会抛出异常,因此可安全地在 finally 块或析构函数中调用。
示例
另请参阅
  • close() - 用于显式关闭会话,并传播错误

close

关闭会话并清理资源。 此方法会关闭底层连接并重置全局会话状态。 调用此方法后,会话将失效,无法再用于 后续查询。 语法
当会话用作上下文管理器时, 或会话对象被销毁时,此方法会自动调用。
重要调用 `close()“ 后,任何尝试继续使用该会话的操作都会报错。
示例

query

执行 SQL 查询并返回结果。 此方法会在会话的数据库中执行 SQL 查询,并以指定格式返回结果。该方法支持多种输出格式,并在多次查询之间保持会话状态。 语法
参数 返回值 以指定格式返回查询结果。 具体返回类型取决于 fmt 参数:
  • String 格式 (CSV、JSON 等) 返回 str
  • 二进制格式 (Arrow、Parquet) 返回 bytes
引发异常
不支持 “Debug” 格式,系统会自动将其转换为 “CSV” 并发出警告。 如需调试,请改用 connection string 参数。
警告此方法会同步执行查询,并将所有结果加载到内存中。对于较大的结果集,请考虑使用 send_query() 获取流式结果。
示例
参见
  • send_query() - 用于以流式方式执行查询
  • sql - 该方法的别名

send_query

执行 SQL 查询,并返回一个流式结果迭代器。 此方法会针对会话的数据库执行 SQL 查询,并返回一个流式结果对象,让你能够遍历结果,而无需一次将全部内容加载到内存中。这对于大型结果集尤其有用。 语法
参数 返回值 抛出异常
不支持 “Debug” 格式,并会在发出警告后自动转换为 “CSV”。 如需调试,请改用 connection string 参数。
返回的 StreamingResult 对象应尽快消费或妥善保存,因为它会保持与数据库的 connection。
示例
另请参见
  • query() - 用于执行非流式查询
  • chdb.state.sqlitelike.StreamingResult - 流式结果迭代器

sql

执行 SQL 查询并返回结果。 此方法会在会话的数据库中执行 SQL 查询,并以指定格式返回结果。该方法支持多种输出格式,并在多次查询之间保持会话状态。 语法
参数 返回值 以指定格式返回查询结果。 具体返回类型取决于 fmt 参数:
  • 字符串格式 (CSV、JSON 等) 返回 str
  • 二进制格式 (Arrow、Parquet) 返回 bytes
引发:
不支持 “Debug” 格式,并会自动将其转换为 “CSV”,同时发出警告。 如需调试,请改用连接字符串参数。
警告此方法会同步执行查询,并将所有结果加载到内存中。 对于大型结果集,建议使用 send_query() 以流式方式获取结果。
示例
另请参见

状态管理

chdb.state.connect

创建一个到 chDB 后台服务器的 Connection 此函数会建立与 chDB (ClickHouse) 数据库引擎的连接。 每个进程只允许有一个打开的连接。对相同 连接字符串的多次调用将返回同一个连接对象。 语法
参数 基础格式 支持的连接字符串格式: 带查询参数 查询参数处理 查询参数会作为启动参数传递给 ClickHouse 引擎。 特殊参数处理如下: 完整参数列表请参见 clickhouse local --help --verbose 返回值 抛出异常
警告每个进程仅支持一个连接。 创建新连接时会关闭任何现有连接。
示例
另请参见
  • Connection - 数据库连接类
  • Cursor - 用于 DB-API 2.0 操作的数据库游标

class chdb.state.sqlitelike.Connection

基类:object 语法

close

关闭连接并清理资源。 此方法会关闭数据库连接,并清理所有相关资源, 包括活动游标。调用此方法后, 该连接将失效,无法再用于后续操作。 语法
此方法是幂等的——多次调用也很安全。
警告关闭连接时,任何正在进行的流式查询都会被取消。 请确保在关闭前,所有重要数据都已处理完毕。
示例

cursor

创建一个用于执行查询的 Cursor 对象。 此方法会创建一个数据库游标,提供执行查询和获取结果所需的标准 DB-API 2.0 接口。 该游标可对查询执行 和结果获取进行更细粒度的控制。 语法
返回值
创建新游标会替换与此连接关联的现有游标。每个连接仅支持一个游标。
示例
另请参见
  • Cursor - 数据库游标的实现

query

执行 SQL 查询并返回完整结果。 此方法会同步执行 SQL 查询,并返回完整的 结果集。它支持多种输出格式,并会自动进行 格式特定的后处理。 语法
参数: 返回值 引发的异常
警告此方法会将整个结果集加载到内存中。对于大型 结果,建议使用 send_query() 进行流式处理。
示例
另请参见

send_query

执行 SQL 查询并返回一个流式结果迭代器。 此方法会执行 SQL 查询,并返回一个 StreamingResult 对象, 让你能够遍历结果,而不必一次性将所有内容 加载到内存中。这非常适合处理大型结果集。 语法
参数 返回 引发
只有 “Arrow” 格式支持对返回的 StreamingResult 调用 record_batch() 方法。
示例
另请参阅

class chdb.state.sqlitelike.StreamingResult

基类:object 用于处理大型查询结果的流式结果迭代器。 此类提供迭代器接口,可在不将整个结果集加载到内存中的情况下流式处理查询结果。它支持多种输出格式,并提供用于手动拉取结果和流式传输 PyArrow RecordBatch 的方法。

fetch

拉取下一批流式结果。 此方法会从流式查询结果中拉取下一批可用数据。返回数据的格式取决于发起流式查询时指定的格式。 语法
返回值 示例

cancel

取消流式查询并清理资源。 此方法会取消任何正在进行的流式查询,并释放相关 资源。当你希望在流耗尽之前停止处理结果时, 应调用它。 语法
示例

close

关闭流式结果并清理资源。 cancel() 的别名。用于关闭流式结果迭代器, 并释放相关资源。 语法

record_batch

创建一个 PyArrow RecordBatchReader,以高效进行批次处理。 该方法会创建一个 PyArrow RecordBatchReader,使您能够高效地 迭代 Arrow 格式的查询结果。这是在使用 PyArrow 时处理大型 结果集的最高效方式。 语法
参数 返回值
该方法仅在流式查询以 format="Arrow" 启动时可用。与其他格式一起使用会引发错误。
示例

迭代器协议

StreamingResult 支持 Python 的迭代器协议,因此可以 直接用于 for 循环:

上下文管理器协议

StreamingResult 支持上下文管理器协议,可自动清理资源:

chdb.state.sqlitelike.Cursor

基类:object

close

关闭游标并释放资源。 此方法会关闭游标并释放所有相关资源。 调用此方法后,游标将失效,且无法再 用于后续操作。 语法
此方法具有幂等性——多次调用也是安全的。 连接关闭时,游标也会自动关闭。
示例

column_names

返回最近一次执行的查询的列名列表。 此方法返回最近一次执行的 SELECT 查询的列名。返回的名称顺序与它们在结果集中的顺序 一致。 语法
返回值 示例
另请参阅

column_types

返回上一次执行的查询中的列类型列表。 此方法返回最近一次执行的 SELECT 查询的 ClickHouse 列类型名称。返回的类型顺序与其在结果集中的出现顺序一致。 语法
返回值 示例
另请参阅

commit

提交所有待处理的事务。 此方法会提交所有待处理的数据库事务。在 ClickHouse 中, 大多数操作都会自动提交,但提供此方法是为了兼容 DB-API 2.0。
ClickHouse 通常会自动提交操作,因此通常无需显式提交。 提供此方法是为了兼容标准的 DB-API 2.0 工作流程。
语法
示例

property description : list

按照 DB-API 2.0 规范返回列描述。 此属性会返回一个包含 7 项 Tuple 的列表,用于描述最近一次执行的 SELECT 查询结果集中的每一列。每个 Tuple 包含: (name, type_code, display_size, internal_size, precision, scale, null_ok) 目前,仅提供 name 和 type_code,其他字段均设为 None。 返回值
这符合 DB-API 2.0 中对 cursor.description 的规范。 在此实现中,只有前两个元素 (name 和 type_code) 包含有效 数据。
示例
另请参见

execute

执行 SQL 查询,并为后续拉取结果做好准备。 此方法执行 SQL 查询,并将结果准备为可通过 fetch 方法获取。它会处理结果数据的解析,以及 ClickHouse 数据类型的自动转换。 语法
参数: 引发
此方法遵循 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
示例
另请参见

fetchall

从查询结果中拉取所有剩余行。 此方法从当前游标位置开始, 拉取当前查询结果集中所有剩余行。它返回一个由行 Tuple 组成的 Tuple,并应用适当的 Python 类型转换。 语法
返回值:
警告此方法会一次性将所有剩余行加载到内存中。对于较大的 结果集,建议使用 fetchmany() 按 批次处理结果。
示例
另请参阅

fetchmany

从查询结果中拉取多行。 此方法会从当前查询结果集中最多拉取 ‘size’ 行。它返回一个由行 Tuple 组成的 Tuple,其中每一行都包含经过适当 Python 类型转换的列值。 语法
参数 返回值
此方法遵循 DB-API 2.0 规范。如果结果集已耗尽,返回的行数 会少于 ‘size’。
示例
另请参阅

fetchone

从查询结果中拉取下一行。 此方法会从当前查询结果集 中拉取下一条可用记录。它会返回一个包含各列值的 Tuple, 并进行适当的 Python 类型转换。 语法
返回:
此方法遵循 DB-API 2.0 规范。列值会根据 ClickHouse 列类型自动转换为相应的 Python 类型。
示例
另请参阅

chdb.state.sqlitelike

将查询结果转换为 PyArrow Table。 此函数会将 chdb 的查询结果转换为 PyArrow Table 格式, 从而实现高效的列式数据访问,并可与其他数据处理库 互操作。 语法
参数: 返回值 引发异常
此函数要求同时安装 pyarrow 和 pandas。 可使用以下命令安装:pip install pyarrow pandas
警告空结果会返回一个不包含 schema 的空 PyArrow Table。
示例

chdb.state.sqlitelike.to_df

将查询结果转换为 Pandas DataFrame。 此函数会先将 chdb 查询结果转换为 PyArrow Table,然后再转换为 DataFrame,从而能够通过 Pandas API 方便地进行数据分析。 语法
参数: 返回: 引发
此函数使用多线程将 Arrow 转换为 Pandas, 以提升大型数据集的处理性能。
另请参阅 示例

DataFrame 集成

chdb.dataframe.Table

基类:

数据库 API (DBAPI) 2.0 接口

chDB 提供兼容 Python DB-API 2.0 的数据库连接接口,使你能够将 chDB 与需要标准数据库接口的工具和框架配合使用。 chDB DB-API 2.0 接口包括:
  • 连接:使用 connection string 管理数据库连接
  • 游标:执行查询并获取结果
  • 类型系统:符合 DB-API 2.0 规范的类型常量和转换器
  • 错误处理:标准的数据库异常层次结构
  • 线程安全:1 级线程安全 (线程可共享模块,但不可共享连接)

核心函数

Database API (DBAPI) 2.0 接口提供以下核心函数:

chdb.dbapi.connect

初始化新的数据库连接。 语法
参数 抛出

chdb.dbapi.get_client_info()

获取客户端版本信息。 以字符串形式返回 chDB 客户端版本号,以兼容 MySQLdb。 语法
返回值

类型构造器

chdb.dbapi.Binary(x)

将 x 以二进制类型返回。 此函数会将输入转换为 bytes 类型,以便根据 DB-API 2.0 规范用于二进制 database 字段。 语法
参数 返回值

连接类

chdb.dbapi.connections.Connection(path=None)

基类:object 符合 DB-API 2.0 规范的 chDB 数据库连接。 此类提供标准的 DB-API 接口,用于连接到 chDB 数据库并与之交互。它同时支持内存数据库和基于文件的数据库。 该连接管理底层的 chDB engine,并提供用于 执行查询、管理事务 (对 ClickHouse 而言是空操作) 以及创建游标的方法。
参数 变量 示例
ClickHouse 不支持传统事务,因此 commit() 和 rollback() 操作实际上都是空操作,但为了符合 DB-API 规范,仍提供了这两个方法。

close

关闭数据库连接。 关闭底层的 chDB 连接,并将该连接标记为已关闭。 此后对该连接执行的操作将引发 Error。 语法
抛出

commit

提交当前事务。 语法
对于 chDB/ClickHouse,这属于空操作,因为它不支持传统的 事务。提供此项是为了符合 DB-API 2.0 规范。

cursor

创建一个用于执行查询的新游标。 语法
参数 返回值 引发 示例

escape

对值进行转义,以便安全地插入 SQL 查询中。 语法
参数 返回值 示例

escape_string

对字符串值进行转义,以用于 SQL 查询。 语法
参数 返回值

property open

检查连接是否已打开。 返回值

query

直接执行 SQL 查询并返回原始结果。 此方法会绕过游标接口,直接执行查询。 对于标准的 DB-API 用法,建议优先使用 cursor() 方法。 语法
参数: 返回值 引发异常 示例

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()。
兼容性这是一个占位实现。底层 ClickHouse engine 不支持传统存储过程的 功能,例如 OUT/INOUT 参数、多个结果集 以及 server 变量。

close

关闭游标并释放相关资源。 关闭后,游标将无法再使用,任何操作都会抛出异常。 关闭游标会读取完所有剩余数据,并释放底层游标。 语法

execute

执行 SQL 查询,并可选择绑定参数。 此方法执行单条 SQL 语句,并可选择进行参数替换。 它支持多种参数占位符形式,使用更灵活。 语法
参数 返回值 参数风格 示例
抛出

executemany(query, args)

使用不同的参数集多次执行查询。 该方法可高效地对同一 SQL 查询执行多次, 每次使用不同的参数值。它尤其适用于批量 INSERT 操作。 语法
参数 返回值 示例
该方法通过优化查询执行流程,提高多行 INSERT 和 UPDATE 操作的性能。

fetchall()

从查询结果中获取所有剩余行。 语法
返回值 抛出
警告对于大型结果集,此方法可能会消耗大量内存。 处理大量数据时,请考虑使用 fetchmany()
示例

fetchmany

从查询结果中获取多行。 语法
参数 返回值 引发异常 示例

fetchone

从查询结果中获取下一行。 语法
返回值 抛出 示例

max_stmt_length = 1024000

executemany() 生成的最大语句大小。 默认值为 1024000。

mogrify

返回将发送到数据库的精确查询字符串。 此方法会显示参数替换后的最终 SQL 查询, 这对调试和日志很有帮助。 语法
参数 返回值 示例
此方法遵循 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 会自动在内部处理输出大小。

错误类

用于 chdb database 操作的异常类。 该模块提供了完整的异常类层次结构,用于处理 chdb 中与 database 相关的 error,并遵循 Python Database API Specification v2.0。 异常类层次结构如下:
每个异常类都表示一类特定的数据库错误:
这些异常类符合 Python DB API 2.0 规范, 可在不同的数据库操作中提供一致的错误处理。
另请参阅 示例

异常 chdb.dbapi.err.DataError

基类:DatabaseError 因处理中的数据存在问题而引发的异常。 当数据库操作因正在处理的数据出现问题而失败时,会引发此异常,例如:
  • 除零操作
  • 数值超出范围
  • 无效的日期/时间值
  • 字符串截断错误
  • 类型转换失败
  • 不符合列类型的数据格式
引发 示例

异常 chdb.dbapi.err.DatabaseError

基类:Error 为与数据库相关的错误而引发的异常。 这是所有数据库相关错误的基类。它涵盖数据库操作期间发生的、 与数据库本身相关而非与接口相关的 所有错误。 常见场景包括:
  • SQL 执行错误
  • 数据库连接问题
  • 与事务相关的问题
  • 违反数据库特定约束
这是更具体的数据库错误类型的父类, 例如 DataErrorOperationalError 等。

异常 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'

根据给定对象创建一个新的字符串对象。如果指定了 encoding 或 errors,则该对象必须提供一个数据缓冲区, 该缓冲区将使用给定的编码和错误处理器进行解码。 否则,返回 object._\_str_\_() (如果已定义) 或 repr(object) 的结果。
  • encoding 默认为‘utf-8’。
  • errors 默认为‘strict’。

chdb.dbapi.threadsafety = 1

将数值或字符串转换为整数;如果未提供参数,则返回 0。 如果 x 是数值,则返回 x._int_()。对于浮点数, 会向零方向截断。 如果 x 不是数值,或者给定了 base,那么 x 必须是一个表示给定 进制整数字面量的字符串、bytes 或 bytearray 实例。 该字面量前面可以有 ‘+’ 或 ‘-’,并且两侧可以包含空白字符。 base 默认为 10。有效的进制为 0 和 2-36。 base 为 0 表示根据字符串中的整数字面量来解释其进制。

chdb.dbapi.paramstyle = 'format'

根据给定对象创建一个新的字符串对象。如果指定了 encoding 或 errors,那么该对象必须暴露一个数据缓冲区, 该缓冲区将使用给定的编码和错误处理程序进行解码。 否则,返回 object._str_() 的结果 (如果已定义) 或 repr(object)。 encoding 默认为‘utf-8’。 errors 默认为‘strict’。

类型常量

chdb.dbapi.STRING = frozenset({247, 253, 254})

用于 DB-API 2.0 类型比较的扩展型 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它可实现更灵活的类型检查,既可以使用相等运算符,也可以使用不等运算符, 将单个项与该集合进行比较。 这类用法适用于 STRING、BINARY、NUMBER 等类型常量,以便进行 诸如“field_type == STRING”之类的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.BINARY = frozenset({249, 250, 251, 252})

为 DB-API 2.0 类型比较扩展的 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持灵活的类型检查,允许使用相等和不等运算符 将单个项与该集合进行比较。 这用于 STRING、BINARY、NUMBER 等类型常量,从而支持 诸如 “field_type == STRING” 这样的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.NUMBER = frozenset({0, 1, 3, 4, 5, 8, 9, 13})

用于 DB-API 2.0 类型比较的扩展型 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持更灵活的类型检查,使单个项既可以使用相等运算符, 也可以使用不等运算符与该集合进行比较。 这用于 STRING、BINARY、NUMBER 等类型常量,以支持 类似“field_type == STRING”这样的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.DATE = frozenset({10, 14})

用于 DB-API 2.0 类型比较的扩展型 frozenset。 该类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持更灵活的类型检查,即可使用相等和不等运算符将单个项 与该集合进行比较。 它用于 STRING、BINARY、NUMBER 等类型常量,以便支持 诸如 “field_type == STRING” 这样的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.TIME = frozenset({11})

用于 DB-API 2.0 类型比较的扩展版 frozenset。 此类在 frozenset 的基础上进行了扩展,以支持 DB-API 2.0 的类型比较语义。 它支持更灵活的类型检查,使单个项既可以通过相等运算符,也可以通过不等运算符 与该集合进行比较。 这可用于 STRING、BINARY、NUMBER 等类型常量,从而支持 诸如“field_type == STRING”这样的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.TIMESTAMP = frozenset({7, 12})

用于 DB-API 2.0 类型比较的扩展版 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持更灵活的类型检查,可以使用相等或不等运算符, 将单个项与该集合进行比较。 它用于 STRING、BINARY、NUMBER 等类型常量,以支持 “field_type == STRING”这类比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.DATETIME = frozenset({7, 12})

用于 DB-API 2.0 类型比较的扩展型 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持更灵活的类型检查,使单个项既可使用相等运算符,也可使用不等运算符 与该集合进行比较。 这类对象用于 STRING、BINARY、NUMBER 等类型常量,从而支持 类似“field_type == STRING”的比较,其中 field_type 是单个类型值。 示例

chdb.dbapi.ROWID = frozenset({})

为 DB-API 2.0 类型比较扩展的 frozenset。 此类扩展了 frozenset,以支持 DB-API 2.0 的类型比较语义。 它支持灵活的类型检查,使单个项既可使用相等运算符,也可使用不等运算符 与该集合进行比较。 这用于 STRING、BINARY、NUMBER 等类型常量,以支持 诸如“field_type == STRING”这样的比较,其中 field_type 是单个类型值。 示例
使用示例 基本查询示例:
使用数据:
连接管理:
最佳实践
  1. 连接管理:使用完毕后务必关闭连接和游标
  2. 上下文管理器:使用 with 语句自动清理资源
  3. 批次处理:对于较大的结果集,使用 fetchmany()
  4. 错误处理:将数据库操作放在 try-except 块中
  5. 参数绑定:尽可能使用参数化查询
  6. 内存管理:对于非常大的数据集,避免使用 fetchall()
  • chDB 的 DB-API 2.0 接口与大多数 Python 数据库工具兼容
  • 该接口提供 Level 1 线程安全 (线程可以共享模块,但不能共享连接)
  • 连接字符串支持与 chDB 会话相同的参数
  • 支持所有标准的 DB-API 2.0 异常
警告
  • 务必关闭游标和连接,避免资源泄漏
  • 较大的结果集应按批次处理
  • 参数绑定语法遵循 format 风格:%s

用户自定义函数 (UDF)

chDB 的用户自定义函数模块。 该模块提供了在 chDB 中创建和管理用户自定义函数 (UDF) 的功能。 你可以通过编写自定义 Python 函数来扩展 chDB 的能力, 并在 SQL 查询中调用这些函数。

chdb.udf.chdb_udf

chDB Python UDF (用户自定义函数) 装饰器。 语法
参数 注意
  1. 函数应为无状态。仅支持 UDFs,不支持 UDAFs。
  2. 默认返回类型为 String。返回类型应为 ClickHouse 数据类型之一。
  3. 函数应接受 String 类型的参数。所有参数均为字符串。
  4. 函数会对输入的每一行调用一次。
  5. 函数应为纯 Python 函数。请导入函数中使用的所有模块。
  6. 所用的 Python 解释器与运行脚本时使用的解释器相同。
示例

chdb.udf.generate_udf

生成 UDF 配置文件和可执行脚本。 此函数会为 chDB 中的用户自定义函数 (UDF) 创建所需的文件:
  1. 用于处理输入数据的 Python 可执行脚本
  2. 用于在 ClickHouse 中注册 UDF 的 XML 配置文件
语法
参数
此函数通常由 @chdb_udf 装饰器调用,用户不应直接调用。

工具

适用于 chDB 的实用函数和辅助工具。 本模块包含各种用于 chDB 的实用函数,例如数据类型推断、数据转换辅助函数以及调试工具。

chdb.utils.convert_to_columnar

将字典列表转换为列式格式。 该函数接受一个字典列表,并将其转换为一个字典, 其中每个键对应一列,每个值则是该列的值列表。 字典中缺失的值会表示为 None。 语法
参数 返回值 示例

chdb.utils.flatten_dict

将嵌套字典扁平化。 此函数接收一个嵌套字典并将其扁平化,使用分隔符拼接嵌套键。 由字典组成的列表会被序列化为 JSON 字符串。 语法
参数 返回值 示例

chdb.utils.infer_data_type

为一组值推断最合适的数据类型。 此函数会检查一组值,并确定能够表示列表中所有值的最合适数据类型。它会考虑整数、无符号整数、Decimal 和浮点类型;如果这些值无法用任何数值类型表示,或者所有值均为 None,则默认使用“string”。 语法
参数 返回值
  • 如果列表中的所有值都是 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')

内置的不可变序列。 如果未提供参数,构造函数会返回一个空元组。 如果指定了 iterable,则会用 iterable 中的项初始化该元组。 如果参数本身就是元组,返回值就是该对象本身。

chdb.engine_version = '25.5.2.1'

根据给定对象创建一个新的字符串对象。如果指定了 encoding 或 errors,则该对象必须提供一个数据缓冲区, 并将使用给定的编码和错误处理器对其进行解码。 否则,返回 object._str_() 的结果 (如果已定义) , 或 repr(object)。
  • encoding 默认为 ‘utf-8’。
  • errors 默认为 ‘strict’。

chdb.__version__ = '3.6.0'

根据给定对象创建一个新的字符串对象。如果指定了 encoding 或 errors,则该对象必须提供一个数据缓冲区, 该缓冲区将使用给定的编码和错误处理程序进行解码。 否则,返回 object._str_() 的结果 (如果已定义) 或 repr(object)。
  • encoding 默认为 ‘utf-8’。
  • errors 默认为 ‘strict’。
最后修改于 2026年7月2日