Python API Reference
Core Query Functions
chdb.query
使用 chDB 引擎执行 SQL 查询。
这是主要的查询函数,它使用嵌入式 ClickHouse 引擎执行 SQL 语句。支持多种输出格式,并且可以与内存或基于文件的数据库一起使用。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str | 必填 | 要执行的 SQL 查询字符串 |
output_format | str | "CSV" | 结果的输出格式。支持的格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "Arrow" - Apache Arrow 格式• "Parquet" - Parquet 格式• "DataFrame" - Pandas DataFrame• "ArrowTable" - PyArrow 表• "Debug" - 启用详细日志记录 |
path | str | "" | 数据库文件路径。默认为内存数据库。 可以是文件路径或 ":memory:" 表示内存数据库 |
udf_path | str | "" | 用户定义函数目录的路径 |
返回值
以指定格式返回查询结果:
返回类型 | 条件 |
---|---|
str | 对于文本格式,如 CSV、JSON |
pd.DataFrame | 当 output_format 为 "DataFrame" 或 "dataframe" 时 |
pa.Table | 当 output_format 为 "ArrowTable" 或 "arrowtable" 时 |
chdb 结果对象 | 对于其他格式 |
抛出异常
异常 | 条件 |
---|---|
ChdbError | 如果 SQL 查询执行失败 |
ImportError | 如果缺少 DataFrame/Arrow 格式所需的依赖项 |
示例
chdb.sql
使用 chDB 引擎执行 SQL 查询。
这是主要的查询函数,它使用嵌入式 ClickHouse 引擎执行 SQL 语句。支持多种输出格式,并且可以与内存或基于文件的数据库一起使用。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str | 必填 | 要执行的 SQL 查询字符串 |
output_format | str | "CSV" | 结果的输出格式。支持的格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "Arrow" - Apache Arrow 格式• "Parquet" - Parquet 格式• "DataFrame" - Pandas DataFrame• "ArrowTable" - PyArrow 表• "Debug" - 启用详细日志记录 |
path | str | "" | 数据库文件路径。默认为内存数据库。 可以是文件路径或 ":memory:" 表示内存数据库 |
udf_path | str | "" | 用户定义函数目录的路径 |
返回值
以指定格式返回查询结果:
返回类型 | 条件 |
---|---|
str | 对于文本格式,如 CSV、JSON |
pd.DataFrame | 当 output_format 为 "DataFrame" 或 "dataframe" 时 |
pa.Table | 当 output_format 为 "ArrowTable" 或 "arrowtable" 时 |
chdb 结果对象 | 对于其他格式 |
抛出异常
异常 | 条件 |
---|---|
ChdbError | 如果 SQL 查询执行失败 |
ImportError | 如果缺少 DataFrame/Arrow 格式所需的依赖项 |
示例
chdb.to_arrowTable
将查询结果转换为 PyArrow 表。
将 chDB 查询结果转换为 PyArrow 表,以便高效的列式数据处理。如果结果为空,则返回一个空表。
语法
参数
参数 | 描述 |
---|---|
res | 包含二进制 Arrow 数据的 chDB 查询结果对象 |
返回值
返回类型 | 描述 |
---|---|
pa.Table | 包含查询结果的 PyArrow 表 |
抛出异常
错误类型 | 描述 |
---|---|
ImportError | 如果未安装 pyarrow 或 pandas |
示例
chdb.to_df
将查询结果转换为 Pandas DataFrame。
通过首先转换为 PyArrow 表,然后使用多线程转换为 Pandas,以获得更好的性能,将 chDB 查询结果转换为 Pandas DataFrame。
语法
参数
参数 | 描述 |
---|---|
r | 包含二进制 Arrow 数据的 chDB 查询结果对象 |
返回值
返回类型 | 描述 |
---|---|
pd.DataFrame | 包含查询结果的 Pandas DataFrame |
抛出异常
异常 | 条件 |
---|---|
ImportError | 如果未安装 pyarrow 或 pandas |
示例
Connection and Session Management
以下会话函数可用:
chdb.connect
创建一个与 chDB 后台服务器的连接。
此函数与 chDB (ClickHouse) 数据库引擎建立 连接。每个进程仅允许一个打开的连接。多次使用相同连接字符串调用将返回相同的连接对象。
参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
connection_string | str | ":memory:" | 数据库连接字符串。见下文格式。 |
基本格式
格式 | 描述 |
---|---|
":memory:" | 内存数据库(默认) |
"test.db" | 相对路径数据库文件 |
"file:test.db" | 与相对路径相同 |
"/path/to/test.db" | 绝对路径数据库文件 |
"file:/path/to/test.db" | 与绝对路径相同 |
带查询参数的格式
格式 | 描述 |
---|---|
"file:test.db?param1=value1¶m2=value2" | 带参数的相对路径 |
"file::memory:?verbose&log-level=test" | 带参数的内存数据库 |
"///path/to/test.db?param1=value1¶m2=value2" | 带参数的绝对路径 |
查询参数处理
查询参数作为启动参数传递给 ClickHouse 引擎。特殊参数处理:
特殊参数 | 变为 | 描述 |
---|---|---|
mode=ro | --readonly=1 | 只读模式 |
verbose | (标志) | 启用详细日志记录 |
log-level=test | (设置) | 设置日志级别 |
有关完整的参数列表,请参见 clickhouse local --help --verbose
返回值
返回类型 | 描述 |
---|---|
Connection | 支持的数据库连接对象: • 使用 Connection.cursor() 创建游标• 使用 Connection.query() 直接查询• 使用 Connection.send_query() 流式查询• 支持自动清理的上下文管理器协议 |
抛出异常
异常 | 条件 |
---|---|
RuntimeError | 如果连接到数据库失败 |
每个进程只支持一个连接。 创建新连接将关闭任何现有的连接。
示例
另见
Connection
- 数据库连接类Cursor
- 用于 DB-API 2.0 操作的数据库游标
Exception Handling
class chdb.ChdbError
基类:Exception
chDB 相关错误的基异常类。
当 chDB 查询执行失败或遇到错误时,会引发此异常。它继承自标准 Python Exception 类,并提供来自底层 ClickHouse 引擎的错误信息。
class chdb.session.Session
基类:object
会话将保持查询状态。 如果路径为 None,它将创建一个临时目录并将其用作数据库路径,并在会话关闭时删除临时目录。 您还可以传入路径以在该路径创建一个数据库,以存放数据。
您也可以使用连接字符串传递路径和其他参数。
示例
连接字符串 | 描述 |
---|---|
":memory:" | 内存数据库 |
"test.db" | 相对路径 |
"file:test.db" | 与上述相同 |
"/path/to/test.db" | 绝对路径 |
"file:/path/to/test.db" | 与上述相同 |
"file:test.db?param1=value1¶m2=value2" | 带查询参数的相对路径 |
"file::memory:?verbose&log-level=test" | 带查询参数的内存数据库 |
"///path/to/test.db?param1=value1¶m2=value2" | 带查询参数的绝对路径 |
包含查询参数的连接字符串如 "file:test.db?param1=value1¶m2=value2" “param1=value1”将作为启动参数传递给 ClickHouse 引擎。
有关更多详细信息,请参见 clickhouse local --help --verbose
一些特殊参数处理:
- “mode=ro”会变为“--readonly=1”用于 clickhouse(只读模式)
- 任何时候只能有一个会话。如果您想创建新会话,您需要关闭现有会话。
- 创建新会话将关闭现有会话。
cleanup
带有异常处理的清理会话资源。
此方法尝试关闭会话,同时抑制清理过程中可能发生的任何异常。在错误处理场景中或当您需要确保无论会话状态如何都进行清理时,这尤其有用。
语法
此方法永远不会引发异常,所以在 finally 块或析构函数中调用是安全的。
示例
另见
close()
- 用于显式会话关闭并进行错误传播
close
关闭会话并清理资源。
此方法关闭底层连接并重置全局会话状态。调用此方法后,会话变为无效,不能用于进一步的查询。
语法
当会话作为上下文管理器使用或当会话对象被销毁时,自动调用此方法。
在调用 close()
后,任何尝试使用会话的行为都将导致错误。
示例
query
执行 SQL 查询并返回结果。
此方法针对会话的数据库执行 SQL 查询,并以指定格式返回结果。该方法支持多种输出格式,并在查询之间保持会话状态。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str | 必填 | 要执行的 SQL 查询字符串 |
fmt | str | "CSV" | 结果的输出格式。可用格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "TabSeparated" - 制表符分隔值• "Pretty" - 美化显示的表格格式• "JSONCompact" - 紧凑的 JSON 格式• "Arrow" - Apache Arrow 格式• "Parquet" - Parquet 格式 |
udf_path | str | "" | 用户定义函数的路径。如果未指定,则使用会话初始化的 UDF 路径 |
返回值
以指定格式返回查询结果。 确切的返回类型取决于格式参数:
- 字符串格式(CSV,JSON 等)返回 str
- 二进制格式(Arrow,Parquet)返回 bytes
抛出异常
异常 | 条件 |
---|---|
RuntimeError | 如果会话被关闭或无效 |
ValueError | 如果 SQL 查询格式不正确 |
“不支持调试”格式,将自动转换为“CSV”并发出警告。 对于调试,请使用连接字符串参数。
此方法同步执行查询并将所有结果加载到内存中。对于大型结果集,请考虑使用 send_query()
进行流式结果。
示例
另见
send_query()
- 用于流式查询执行sql
- 此方法的别名
send_query
执行 SQL 查询并返回流式结果迭代器。
此方法针对会话的数据库执行 SQL 查询,并返回一个流式结果对象,允许您在不一次性将所有结果加载到内存中的情况下迭代结果。这对于大型结果集特别有用。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str | 必填 | 要执行的 SQL 查询字符串 |
fmt | str | "CSV" | 结果的输出格式。可用格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "TabSeparated" - 制表符分隔值• "JSONCompact" - 紧凑的 JSON 格式• "Arrow" - Apache Arrow 格式• "Parquet" - Parquet 格式 |
返回值
返回类型 | 描述 |
---|---|
StreamingResult | 一个流式结果迭代器,可逐步产生查询结果。迭代器可以在 for 循环中使用或转换为其他数据结构 |
抛出异常
异常 | 条件 |
---|---|
RuntimeError | 如果会话被关闭或无效 |
ValueError | 如果 SQL 查询格式不正确 |
“不支持调试”格式,将自动转换为“CSV”并发出警告。对于调试,请使用连接字符串参数。
返回的 StreamingResult 对象应及时消耗或适当存储,因为它保持与数据库的连接。
示例
另见
query()
- 用于非流式查询执行chdb.state.sqlitelike.StreamingResult
- 流式结果迭代器
sql
执行 SQL 查询并返回结果。
此方法针对会话的数据库执行 SQL 查询,并以指定格式返回结果。该方法支持多种输出格式,并在查询之间保持会话状态。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str | 必填 | 要执行的 SQL 查询字符串 |
fmt | str | "CSV" | 结果的输出格式。可用格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "TabSeparated" - 制表符分隔值• "Pretty" - 美化显示的表格格式• "JSONCompact" - 紧凑的 JSON 格式• "Arrow" - Apache Arrow 格式• "Parquet" - Parquet 格式 |
udf_path | str | "" | 用户定义函数的路径。如果未指定,则使用会话初始化的 UDF 路径 |
返回值
以指定格式返回查询结果。 确切的返回类型取决于格式参数:
- 字符串格式(CSV,JSON 等)返回 str
- 二进制格式(Arrow,Parquet)返回 bytes
抛出异常:
异常 | 条件 |
---|---|
RuntimeError | 如果会话被关闭或无效 |
ValueError | 如果 SQL 查询格式不正确 |
“不支持调试”格式,将自动转换为“CSV”并发出警告。对于调试,请使用连接字符串参数。
此方法同步执行查询并将所有结果加载到内存中。
对于大型结果集,请考虑使用 send_query()
进行流式结果。
示例
另见
send_query()
- 用于流式查询执行sql
- 此方法的别名
State Management
chdb.state.connect
创建与 chDB 后台服务器的 连接。
此函数与 chDB (ClickHouse) 数据库引擎建立连接。 每个进程仅允许一个打开的连接。多次使用相同连接字符串调用将返回相同的连接对象。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
connection_string(str, optional) | str | ":memory:" | 数据库连接字符串。见下文格式。 |
基本格式
支持的连接字符串格式:
格式 | 描述 |
---|---|
":memory:" | 内存数据库(默认) |
"test.db" | 相对路径数据库文件 |
"file:test.db" | 与相对路径相同 |
"/path/to/test.db" | 绝对路径数据库文件 |
"file:/path/to/test.db" | 与绝对路径相同 |
带查询参数的格式
格式 | 描述 |
---|---|
"file:test.db?param1=value1¶m2=value2" | 带参数的相对路径 |
"file::memory:?verbose&log-level=test" | 带参数的内存数据库 |
"///path/to/test.db?param1=value1¶m2=value2" | 带参数的绝对路径 |
查询参数处理
查询参数作为启动参数传递给 ClickHouse 引擎。特殊参数处理:
特殊参数 | 变为 | 描述 |
---|---|---|
mode=ro | --readonly=1 | 只读模式 |
verbose | (标志) | 启用详细日志记录 |
log-level=test | (设置) | 设置日志级别 |
有关完整的参数列表,请参见 clickhouse local --help --verbose
返回值
返回类型 | 描述 |
---|---|
Connection | 支持的数据库连接对象: • 使用 Connection.cursor() 创建游标• 使用 Connection.query() 直接查询• 使用 Connection.send_query() 流式查询• 支持自动清理的上下文管理器协议 |
抛出异常
异常 | 条件 |
---|---|
RuntimeError | 如果连接到数据库失败 |
每个进程只支持一个连接。 创建新连接将关闭任何现有的连接。
示例
另见
Connection
- 数据库连接类Cursor
- 用于 DB-API 2.0 操作的数据库游标
class chdb.state.sqlitelike.Connection
基类:object
语法
close
关闭连接并清理资源。
此方法关闭数据库连接并清理任何相关资源,包括活动游标。调用此方法后,连接变为无效,不能用于进一步的操作。
语法
此方法是幂等的 - 多次调用是安全的。
任何正在进行的流式查询将在连接关闭时被取消。在关闭之前,请确保处理所有重要数据。
示例
cursor
创建一个 Cursor 对象以执行查询。
此方法创建一个数据库游标,提供标准的 DB-API 2.0 接口来执行查询和提取结果。 游标允许对查询执行和结果检索进行精细控制。
语法
返回
返回类型 | 描述 |
---|---|
Cursor | 用于数据库操作的游标对象 |
创建新游标将替换与此连接相关的任何现有游标。每个连接仅支持一个游标。
示例
另请参见
Cursor
- 数据库游标实现
query
执行 SQL 查询并返回完整结果。
此方法同步执行 SQL 查询并返回完整 结果集。它支持各种输出格式并自动应用 格式特定的后处理。
语法
参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
query | str | 必需 | 要执行的 SQL 查询字符串 |
format | str | "CSV" | 结果的输出格式。支持的格式: • "CSV" - 逗号分隔值(字符串)• "JSON" - JSON 格式(字符串)• "Arrow" - Apache Arrow 格式(字节)• "Dataframe" - Pandas DataFrame(需要 pandas)• "Arrowtable" - PyArrow 表(需要 pyarrow) |
返回
返回类型 | 描述 |
---|---|
str | 对于字符串格式(CSV,JSON) |
bytes | 对于 Arrow 格式 |
pandas.DataFrame | 对于数据框格式 |
pyarrow.Table | 对于箭头表格式 |
引发
异常 | 条件 |
---|---|
RuntimeError | 如果查询执行失败 |
ImportError | 如果所需的格式包未安装 |
此方法将整个结果集加载到内存中。对于大型结果,请考虑使用 send_query()
进行流式处理。
示例
另请参见
send_query()
- 用于流式查询执行
send_query
执行 SQL 查询并返回流式结果迭代器。
此方法执行 SQL 查询并返回一个 StreamingResult 对象 ,允许您迭代结果而不一次性加载所有内容。 这对于处理大型结果集非常理想。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
query | str | 必需 | 要执行的 SQL 查询字符串 |
format | str | "CSV" | 结果的输出格式。支持的格式: • "CSV" - 逗号分隔值• "JSON" - JSON 格式• "Arrow" - Apache Arrow 格式(启用 record_batch() 方法)• "dataframe" - Pandas DataFrame 片段• "arrowtable" - PyArrow 表片段 |
返回
返回类型 | 描述 |
---|---|
StreamingResult | 一个流式迭代器,用于查询结果,支持: • 迭代器协议(for 循环) • 上下文管理器协议(with 语句) • 使用 fetch() 方法手动提取 • PyArrow RecordBatch 流式(仅限 Arrow 格式) |
引发
异常 | 条件 |
---|---|
RuntimeError | 如果查询执行失败 |
ImportError | 如果所需的格式包未安装 |
仅 “Arrow” 格式支持返回的 StreamingResult 上的 record_batch()
方法。
示例
另请参见
query()
- 用于非流式查询执行StreamingResult
- 流式结果迭代器
class chdb.state.sqlitelike.Cursor
基于:object
close
关闭游标并清理资源。
此方法关闭游标并清理任何相关资源。 调用此方法后,游标变得无效,无法用于进一步操作。
语法
此方法是幂等的 - 多次调用是安全的。 连接关闭时,游标也会自动关闭。
示例
column_names
从最后执行的查询中返回列名列表。
此方法返回最近执行的 SELECT 查询中的列名。名称的返回顺序与它们在结果集中的出现顺序相同。
语法
返回
返回类型 | 描述 |
---|---|
list | 列名字符串的列表,如果没有执行查询或查询未返回列,则返回空列表 |
示例
另请参见
column_types()
- 获取列类型信息description
- DB-API 2.0 列描述
column_types
返回最后执行的查询中的列类型列表。
此方法返回最近执行的 SELECT 查询中的 ClickHouse 列类型名称。类型的返回顺序与它们在结果集中的出现顺序相同。
语法
返回
返回类型 | 描述 |
---|---|
list | ClickHouse 类型名称字符串的列表,如果没有执行查询或查询未返回列,则返回空列表 |
示例
另请参见
column_names()
- 获取列名信息description
- DB-API 2.0 列描述
commit
提交任何待处理的事务。
此方法提交任何待处理的数据库事务。在 ClickHouse 中, 大多数操作是自动提交的,但此方法用于 DB-API 2.0 兼容性。
ClickHouse 通常自动提交操作,因此通常不需要显式提交。 此方法的提供是为了与标准 DB-API 2.0 工作流兼容。
语法
示例
property description : list
根据 DB-API 2.0 规范返回列描述。
此属性返回描述最后执行的 SELECT 查询中每列的 7 项元组列表。每个元组包含: (name, type_code, display_size, internal_size, precision, scale, null_ok)
目前,仅提供名称和类型代码,其他字段设置为 None。
返回
返回类型 | 描述 |
---|---|
list | 描述每一列的 7 元组列表,如果没有执行 SELECT 查询,则返回空列表 |
这遵循 DB-API 2.0 关于 cursor.description 的规范。 在此实现中,只有前两个元素(名称和类型代码)包含有意义的数据。
示例
另请参见
column_names()
- 仅获取列名column_types()
- 仅获取列类型
execute
执行 SQL 查询并准备结果以供提取。
此方法执行 SQL 查询并准备结果以供使用 提取方法检索。它处理结果数据的解析和 ClickHouse 数据类型的自动类型转换。
语法
参数:
参数 | 类型 | 描述 |
---|---|---|
query | str | 要执行的 SQL 查询字符串 |
引发
异常 | 条件 |
---|---|
Exception | 如果查询执行失败或结果解析失败 |
此方法遵循 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
从查询结果中获取所有剩余行。
此方法检索当前查询结果集中的所有剩余行,从当前游标位置开始。 它返回一个行元组的元组,并应用适当的 Python 类型转换。
语法
返回:
返回类型 | 描述 |
---|---|
tuple | 包含结果集所有剩余行元组的元组。如果没有行可用,则返回空元组 |
此方法一次性加载所有剩余行到内存中。对于大型结果集,请考虑使用 fetchmany()
来批量处理结果。
示例
另请参见
fetchone()
- 获取单行fetchmany()
- 批量获取多行
fetchmany
从查询结果中获取多行。
此方法从当前查询结果集中检索多达 'size' 行。它返回一个行元组的元组,每一行包含适当的 Python 类型转换的列值。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
size | int | 1 | 要获取的最大行数 |
返回
返回类型 | 描述 |
---|---|
tuple | 包含多达 'size' 行元组的元组。如果结果集耗尽,可能包含更少的行 |
此方法遵循 DB-API 2.0 规范。如果结果集耗尽,它会返回少于 'size' 的行。
示例
另请参见
fetchone()
- 获取单行fetchall()
- 获取所有剩余行
fetchone
从查询结果中获取下一行。
此方法从当前查询结果集中检索下一个可用行。它返回一个元组,包含适当的 Python 类型转换的列值。
语法
返回:
返回类型 | 描述 |
---|---|
Optional[tuple] | 下一行作为列值的元组,如果没有更多行可用,则返回 None |
此方法遵循 DB-API 2.0 规范。列值根据 ClickHouse 列类型自动转换为适当的 Python 类型。
示例
另请参见
fetchmany()
- 获取多行fetchall()
- 获取所有剩余行
chdb.state.sqlitelike
将查询结果转换为 PyArrow 表。
此函数将 chdb 查询结果转换为 PyArrow 表格式, 提供高效的列式数据访问和与其他数据处理库的互操作性。
语法
参数:
参数 | 类型 | 描述 |
---|---|---|
res | - | 从 chdb 查询结果对象,包含 Arrow 格式数据 |
返回
返回类型 | 描述 |
---|---|
pyarrow.Table | 包含查询结果的 PyArrow 表 |
引发
异常 | 条件 |
---|---|
ImportError | 如果未安装 pyarrow 或 pandas 包 |
此函数需要同时安装 pyarrow 和 pandas。
使用以下命令安装:pip install pyarrow pandas
空结果返回一个没有模式的空 PyArrow 表。
示例
chdb.state.sqlitelike.to_df
将查询结果转换为 Pandas DataFrame。
此函数通过先转换为 PyArrow 表,然后再转换为 DataFrame,将 chdb 查询结果转换为 Pandas DataFrame 格式。这样提供了使用 Pandas API 进行便捷数据分析的能力。
语法
参数:
参数 | 类型 | 描述 |
---|---|---|
r | - | 从 chdb 查询结果对象,包含 Arrow 格式数据 |
返回:
返回类型 | 描述 |
---|---|
pandas.DataFrame | 包含查询结果的 DataFrame,具有适当的列名和数据类型 |
引发
异常 | 条件 |
---|---|
ImportError | 如果未安装 pyarrow 或 pandas 包 |
此函数使用多线程将 Arrow 转换为 Pandas,以提高大型数据集的性能。
另请参见
to_arrowTable()
- 用于 PyArrow 表格式转换
示例
DataFrame 集成
class chdb.dataframe.Table
基于:
数据库 API (DBAPI) 2.0 接口
chDB 提供与数据库连接的 Python DB-API 2.0 兼容接口,允许您将 chDB 与期望标准数据库接口的工具和框架一起使用。
chDB DB-API 2.0 接口包括:
- 连接:数据库连接管理与连接字符串
- 游标:查询执行和结果检索
- 类型系统:与 DB-API 2.0 兼容的类型常量和转换器
- 错误处理:标准数据库异常层次结构
- 线程安全:级别 1 线程安全(线程可以共享模块但不能共享连接)
核心功能
数据库 API (DBAPI) 2.0 接口实现以下核心功能:
chdb.dbapi.connect
初始化新的数据库连接。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
path | str | None | 数据库文件路径。对于内存数据库为 None |
引发
异常 | 条件 |
---|---|
err.Error | 如果无法建立连接 |
chdb.dbapi.get_client_info()
获取客户端版本信息。
返回 chDB 客户端版本的字符串,以兼容 MySQLdb。
语法
返回
返回类型 | 描述 |
---|---|
str | 版本字符串,格式为 'major.minor.patch' |
类型构造器
chdb.dbapi.Binary(x)
将 x 作为二进制类型返回。
此函数将输入转换为字节类型,以用于数据库字段,符合 DB-API 2.0 规范。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
x | - | 要转换为二进制的输入数据 |
返回
返回类型 | 描述 |
---|---|
bytes | 转换为字节的输入 |
连接类
class chdb.dbapi.connections.Connection(path=None)
基于:object
与 chDB 数据库的 DB-API 2.0 兼容连接。
此类提供与 chDB 数据库连接和交互的标准 DB-API 接口。它支持内存和基于文件的数据库。
连接管理底层的 chDB 引擎,提供执行查询、管理事务(对于 ClickHouse 为无操作)和创建游标的方法。
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
path | str | None | 数据库文件路径。如果为 None,则使用内存数据库。可以是类似 'database.db' 的文件路径或 ':memory:' |
变量
变量 | 类型 | 描述 |
---|---|---|
encoding | str | 查询的字符编码,默认为 'utf8' |
open | bool | 如果连接处于打开状态则为 True,若已关闭则为 False |
示例
ClickHouse 不支持传统事务,因此 commit() 和 rollback() 操作为无操作,但为了兼容 DB-API 提供。
close
关闭数据库连接。
关闭底层的 chDB 连接并将此连接标记为已关闭。 对此连接的后续操作将引发错误。
语法
引发
异常 | 条件 |
---|---|
err.Error | 如果连接已关闭 |
commit
提交当前事务。
语法
这对于 chDB/ClickHouse 是无操作的,因为它不支持传统事务。 为了兼容 DB-API 2.0 提供。
cursor
创建一个新的游标以执行查询。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
cursor | - | 被忽略,提供兼容性 |
返回
返回类型 | 描述 |
---|---|
Cursor | 此连接的新游标对象 |
引发
异常 | 条件 |
---|---|
err.Error | 如果连接已关闭 |
示例
escape
转义值以安全地包括在 SQL 查询中。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
obj | - | 要转义的值(字符串,字节,数字等) |
mapping | - | 可选字符映射以进行转义 |
返回
返回类型 | 描述 |
---|---|
- | 输入的转义版本,适合于 SQL 查询 |
示例
escape_string
对字符串值进行转义以用于 SQL 查询。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
s | str | 要转义的字符串 |
返回
返回类型 | 描述 |
---|---|
str | 安全的转义字符串以包括在 SQL 中 |
property open
检查连接是否打开。
返回
返回类型 | 描述 |
---|---|
bool | 如果连接是打开的,则为 True,关闭时为 False |
query
直接执行 SQL 查询并返回原始结果。
此方法绕过游标接口,直接执行查询。 对于标准的 DB-API 使用,建议使用 cursor() 方法。
语法
参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
sql | str 或 bytes | 必需 | 要执行的 SQL 查询 |
fmt | str | "CSV" | 输出格式。支持的格式包括 "CSV"、"JSON"、"Arrow"、"Parquet" 等等 |
返回
返回类型 | 描述 |
---|---|
- | 以指定格式返回的查询结果 |
引发
异常 | 条件 |
---|---|
err.InterfaceError | 如果连接已关闭或查询失败 |
示例
property resp
获取最后查询响应。
返回
返回类型 | 描述 |
---|---|
- | 来自最后一次 query() 调用的原始响应 |
每次直接调用 query() 时,此属性都会更新。 它不反映通过游标执行的查询。
rollback
回滚当前事务。
语法
这对于 chDB/ClickHouse 是无操作的,因为它不支持传统事务。 为了兼容 DB-API 2.0 提供。
游标类
class chdb.dbapi.cursors.Cursor
基于:object
用于执行查询和获取结果的 DB-API 2.0 游标。
游标提供执行 SQL 语句、管理查询结果和在结果集间导航的方法。它支持参数绑定、批量操作,并遵循 DB-API 2.0 规范。
请勿直接创建 Cursor 实例。请使用 Connection.cursor()
代替。
变量 | 类型 | 描述 |
---|---|---|
description | tuple | 最近查询结果的列元数据 |
rowcount | int | 最近查询影响的行数(如果未知则为 -1) |
arraysize | int | 默认一次获取行数(默认为 1) |
lastrowid | - | 最近插入行的 ID(如果适用) |
max_stmt_length | int | executemany() 的最大语句大小(默认为 1024000) |
示例
请参见 DB-API 2.0 Cursor 对象 获取完整的规范细节。
callproc
执行存储过程(占位实现)。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
procname | str | 要执行的存储过程名称 |
args | sequence | 传递给过程的参数 |
返回
返回类型 | 描述 |
---|---|
sequence | 原始的 args 参数(未修改) |
chDB/ClickHouse 不支持传统意义上的存储过程。 此方法用于 DB-API 2.0 兼容性,但不执行任何实际操作。请使用 execute() 执行所有 SQL 操作。
这是一个占位实现。传统存储过程的特性,如 OUT/INOUT 参数、多结果集和服务器变量,未被底层 ClickHouse 引擎支持。
close
关闭游标并释放相关资源。
关闭后,游标变得不可用,任何操作都会引发异常。 关闭游标会耗尽所有剩余数据,并释放底层游标。
语法
execute
执行带有可选参数绑定的 SQL 查询。
此方法执行单个 SQL 语句,并可选地进行参数替换。 它支持多种参数占位符样式,以提高灵活性。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
query | str | 必填 | 要执行的 SQL 查询 |
args | tuple/list/dict | None | 要绑定到占位符的参数 |
返回
返回类型 | 描述 |
---|---|
int | 受影响的行数(-1 如果未知) |
参数样式
样式 | 示例 |
---|---|
问号样式 | "SELECT * FROM users WHERE id = ?" |
命名样式 | "SELECT * FROM users WHERE name = %(name)s" |
格式样式 | "SELECT * FROM users WHERE age = %s" (遗留) |
示例
引发异常
异常 | 条件 |
---|---|
ProgrammingError | 如果游标已关闭或查询格式不正确 |
InterfaceError | 如果在执行过程中发生数据库错误 |
executemany(query, args)
使用不同参数集多次执行查询。
此方法高效地多次执行相同的 SQL 查询,并使用不同的参数值。它特别适合用于批量 INSERT 操作。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
query | str | 要多次执行的 SQL 查询 |
args | sequence | 每次执行的参数元组/字典/列表序列 |
返回
返回类型 | 描述 |
---|---|
int | 所有执行中受影响的行的总数 |
示例
此方法通过优化查询执行过程来提高多行 INSERT 和 UPDATE 操作的性能。
fetchall()
从查询结果中获取所有剩余行。
语法
返回
返回类型 | 描述 |
---|---|
list | 表示所有剩余行的元组列表 |
引发异常
异常 | 条件 |
---|---|
ProgrammingError | 如果没有先调用 execute() |
此方法对于大型结果集可能会消耗大量内存。
考虑在处理大数据集时使用 fetchmany()
。
示例
fetchmany
从查询结果中获取多个行。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
size | int | 1 | 要获取的行数。如果未指定,则使用 cursor.arraysize |
返回
返回类型 | 描述 |
---|---|
list | 表示获取行的元组列表 |
引发异常
异常 | 条件 |
---|---|
ProgrammingError | 如果没有先调用 execute() |
示例
fetchone
从查询结果中获取下一行。
语法
返回
返回类型 | 描述 |
---|---|
tuple or None | 下一行作为元组,如果没有更多行,则返回 None |
引发异常
异常 | 条件 |
---|---|
ProgrammingError | 如果没有先调用 execute() |
示例
max_stmt_length = 1024000
executemany()
生成的最大语句大小。
默认值为 1024000。
mogrify
返回将发送到数据库的确切查询字符串。
此方法显示参数替换后的最终 SQL 查询,适合用于调试和日志记录。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
query | str | 必填 | 带参数占位符的 SQL 查询 |
args | tuple/list/dict | None | 要替换的参数 |
返回
返回类型 | 描述 |
---|---|
str | 带参数替换的最终 SQL 查询字符串 |
示例
此方法遵循 Psycopg 使用的 DB-API 2.0 扩展。
nextset
移动到下一个结果集(不支持)。
语法
返回
返回类型 | 描述 |
---|---|
None | 始终返回 None,因为不支持多个结果集 |
chDB/ClickHouse 不支持来自单个查询的多个结果集。 此方法是为了遵循 DB-API 2.0 规范,但始终返回 None。
setinputsizes
为参数设置输入大小(无操作实现)。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
*args | - | 参数大小规格(被忽略) |
此方法没有任何功能,但根据 DB-API 2.0 规范是必需的。 chDB 自动处理参数大小。
setoutputsizes
设置输出列大小(无操作实现)。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
*args | - | 列大小规格(被忽略) |
此方法没有任何功能,但根据 DB-API 2.0 规范是必需的。 chDB 自动处理输出大小。
错误类
用于 chdb 数据库操作的异常类。
该模块提供了一个完整的异常类层次结构,用于处理 chdb 中与数据库相关的错误,遵循 Python 数据库 API 规范 v2.0。
异常层次结构如下:
每个异常类表示特定类别的数据库错误:
异常 | 描述 |
---|---|
Warning | 数据库操作期间的非致命警告 |
InterfaceError | 数据库接口本身的问题 |
DatabaseError | 所有与数据库相关的错误的基类 |
DataError | 数据处理中的问题(无效值、类型错误) |
OperationalError | 数据库操作问题(连接性、资源) |
IntegrityError | 约束违反(外键、唯一性) |
InternalError | 数据库内部错误和损坏 |
ProgrammingError | SQL 语法错误和 API 滥用 |
NotSupportedError | 不支持的功能或操作 |
这些异常类符合 Python DB API 2.0 规范,并为不同数据库操作提供一致的错误处理。
另见
- Python 数据库 API 规范 v2.0
chdb.dbapi.connections
- 数据库连接管理chdb.dbapi.cursors
- 数据库游标操作
示例
exception chdb.dbapi.err.DataError
因处理数据的问题而引发的异常。
当数据库操作因处理数据的问题而失败时,会引发此异常,例如:
- 零除法操作
- 数值超出范围
- 无效的日期/时间值
- 字符串截断错误
- 类型转换失败
- 列类型的数据格式无效
引发
异常 | 条件 |
---|---|
DataError | 当数据验证或处理失败时 |
示例
exception chdb.dbapi.err.DatabaseError
基于:Error
与数据库相关的错误引发的异常。
这是所有与数据库相关的错误的基类。它包括所有在数据库操作期间发生的错误,这些错误与数据库本身有关,而不是接口。
常见场景包括:
- SQL 执行错误
- 数据库连接问题
- 交易相关问题
- 数据库特定的约束违规
这作为更具体的数据库错误类型(如 DataError
,OperationalError
等)的父类。
exception chdb.dbapi.err.Error
所有其他错误异常的基类(非 Warning)。
这是 chdb 中所有错误异常的基类,不包括警告。 它作为所有阻止操作成功完成的数据库错误条件的父类。
此异常层次结构遵循 Python DB API 2.0 规范。
另见
Warning
- 适用于不会阻止操作完成的重要非致命警告
exception chdb.dbapi.err.IntegrityError
影响数据库关系完整性的异常。
当数据库操作违反完整性约束时,会引发此异常,包括:
- 外键约束违反
- 主键或唯一约束违反(重复键)
- 检查约束违反
- NOT NULL 约束违反
- 参照完整性违反
引发
异常 | 条件 |
---|---|
IntegrityError | 当数据库完整性约束被违反时 |
示例
exception chdb.dbapi.err.InterfaceError
基于:Error
与数据库接口相关的错误引发的异常,而不是与数据库本身有关的错误。
当数据库接口实现中出现问题时,便会引发此异常,例如:
- 无效的连接参数
- API 滥用(在已关闭连接上调用方法)
- 接口级协议错误
- 模块导入或初始化失败
引发
异常 | 条件 |
---|---|
InterfaceError | 当数据库接口遇到与数据库操作无关的错误时 |
这些错误通常是编程错误或配置问题,可以通过修复客户端代码或配置来解决。
exception chdb.dbapi.err.InternalError
当数据库遇到内部错误时引发的异常。
当数据库系统遇到应用程序未导致的内部错误时,会引发此异常,例如:
- 无效的游标状态(游标不再有效)
- 事务状态不一致(事务不同步)
- 数据库损坏问题
- 内部数据结构损坏
- 系统级数据库错误
引发
异常 | 条件 |
---|---|
InternalError | 当数据库遇到内部不一致时 |
内部错误可能表明需要数据库管理员关注的严重数据库问题。这些错误通常无法通过应用程序级重试逻辑恢复。
这些错误通常超出了应用程序的控制范围,可能需要数据库重启或修复操作。
exception chdb.dbapi.err.NotSupportedError
当不支持某个方法或数据库 API 时引发的异常。
当应用程序尝试使用当前数据库配置或版本不支持的数据库功能或 API 方法时,会引发此异常,例如:
- 在没有事务支持的连接上请求
rollback()
- 使用当前数据库版本不支持的高级 SQL 功能
- 调用当前驱动程序未实现的方法
- 尝试使用被禁用的数据库功能
引发
异常 | 条件 |
---|---|
NotSupportedError | 当访问不支持的数据库功能时 |
示例
检查数据库文档和驱动程序功能,以避免这些错误。在可能的情况下考虑优雅降级。
exception chdb.dbapi.err.OperationalError
与数据库操作相关的错误引发的异常。
当数据库操作期间发生错误且不一定在程序员的控制之内时,会引发此异常,包括:
- 意外与数据库断开连接
- 找不到或无法访问数据库服务器
- 事务处理失败
- 处理过程中的内存分配错误
- 磁盘空间或资源耗尽
- 数据库服务器内部错误
- 身份验证或授权失败
引发
异常 | 条件 |
---|---|
OperationalError | 当因操作问题导致数据库操作失败时 |
这些错误通常是暂时性的,可能通过重试操作或解决系统级问题来解决。
有些操作错误可能表示需要管理干预的严重系统问题。
exception chdb.dbapi.err.ProgrammingError
数据库操作中的编程错误引发的异常。
当应用程序在使用数据库时出现编程错误时,会引发此异常,包括:
- 表或列不存在
- 创建时表或索引已存在
- 语句中的 SQL 语法错误
- 在准备语句中指定的参数数量错误
- 无效的 SQL 操作(例如,非现有对象的 DROP 操作)
- 数据库 API 方法使用不当
引发
异常 | 条件 |
---|---|
ProgrammingError | 当 SQL 语句或 API 使用中存在错误时 |
示例
exception chdb.dbapi.err.StandardError
基于:Exception
与 chdb 操作相关的异常。
这是所有 chdb 相关异常的基类。它继承自 Python 内置的 Exception 类,并作为数据库操作异常层次结构的根。
此异常类遵循 Python DB API 2.0 规范,用于数据库异常处理。
exception chdb.dbapi.err.Warning
因重要警告而引发的异常,例如插入时的数据截断等。
当数据库操作完成但存在重要警告时引发此异常,这些警告应引起应用程序的注意。 常见场景包括:
- 插入时数据截断
- 数值转换中的精度损失
- 字符集转换警告
这遵循 Python DB API 2.0 规范的警告异常。
模块常量
chdb.dbapi.apilevel = '2.0'
使用给定对象创建一个新字符串对象。如果指定了编码或错误,则该对象必须暴露一个数据缓冲区,该缓冲区将使用给定的编码和错误处理解码。否则,返回 object.__str__()
的结果(如果定义了)或 repr(object)
。
- 编码默认为 ‘utf-8’。
- 错误默认为 ‘strict’。
chdb.dbapi.threadsafety = 1
将数字或字符串转换为整数,如果未给出参数,则返回 0。如果 x 是数字,则返回 x.int()。对于浮点数,这将向零截断。
如果 x 不是数字或给出了基数,则 x 必须是表示给定基数下的整数字面量的字符串、字节或字节数组实例。字面量可以用 ‘+’ 或 ‘-’ 前缀,并用空格包围。基数默认为 10。有效基数为 0 和 2-36。基数 0 意味着根据字符串解释基数作为整数字面量。
chdb.dbapi.paramstyle = 'format'
使用给定对象创建一个新字符串对象。如果编码或错误被指定,则该对象必须暴露一个数据缓冲区,该缓冲区将使用给定的编码和错误处理解码。否则,返回对象.str() 的结果(如果定义了)或 repr(object)。编码默认为 ‘utf-8’。错误默认为 ‘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 是单个类型值。
示例
使用示例
基本查询示例:
处理数据:
连接管理:
最佳实践
- 连接管理:完成后始终关闭连接和游标
- 上下文管理器:使用
with
语句进行自动清理 - 批量处理:对于大结果集使用
fetchmany()
- 错误处理:将数据库操作包装在 try-except 块中
- 参数绑定:尽可能使用参数化查询
- 内存管理:避免对非常大的数据集使用
fetchall()
- chDB 的 DB-API 2.0 接口与大多数 Python 数据库工具兼容
- 该接口提供 1 级线程安全(线程可以共享模块,但不能共享连接)
- 连接字符串支持与 chDB 会话相同的参数
- 支持所有标准的 DB-API 2.0 异常
- 始终关闭游标和连接以避免资源泄漏
- 大结果集应按批处理
- 参数绑定语法遵循格式样式:
%s
用户定义函数 (UDF)
用于 chDB 的用户定义函数模块。
此模块提供了在 chDB 中创建和管理用户定义函数 (UDF) 的功能。 它允许您通过编写自定义 Python 函数来扩展 chDB 的能力,这些函数可以从 SQL 查询中调用。
chdb.udf.chdb_udf
用于 chDB Python UDF(用户定义函数)的装饰器。
语法
参数
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
return_type | str | "String" | 函数的返回类型。应该是 ClickHouse 数据类型之一 |
注意事项
- 函数应无状态。仅支持 UDF,不支持 UDAF。
- 默认返回类型为字符串。返回类型应为 ClickHouse 数据类型之一。
- 函数应接受字符串类型的参数。所有参数均为字符串。
- 该函数将对每行输入调用。
- 函数应为纯 Python 函数。在函数中导入所有使用的模块。
- 使用的 Python 解释器与运行脚本时使用的相同。
示例
chdb.udf.generate_udf
生成用户定义函数 (UDF) 的配置和可执行脚本文件。
此函数创建 chDB 中用户定义函数 (UDF) 所需的文件:
- 处理输入数据的 Python 可执行脚本
- 将 UDF 注册到 ClickHouse 的 XML 配置文件
语法
参数
参数 | 类型 | 描述 |
---|---|---|
func_name | str | UDF 函数的名称 |
args | list | 函数的参数名称列表 |
return_type | str | 函数的 ClickHouse 返回类型 |
udf_body | str | UDF 函数的 Python 源代码主体 |
此函数通常由 @chdb_udf 装饰器调用,用户不应直接调用。
工具
与 chDB 一起使用的实用函数和帮助程序。
此模块包含用于与 chDB 配合使用的各种实用函数,包括数据类型推断、数据转换帮助程序和调试工具。
chdb.utils.convert_to_columnar
将字典列表转换为列式格式。
此函数接受字典列表,并将其转换为一个字典,其中每个键对应于一列,每个值是该列值的列表。 字典中缺失的值表示为 None。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
items | List[Dict[str, Any]] | 要转换的字典列表 |
返回
返回类型 | 描述 |
---|---|
Dict[str, List[Any]] | 一个字典,键作为列名,值作为列值的列表 |
示例
chdb.utils.flatten_dict
扁平化嵌套字典。
此函数接受一个嵌套字典并将其扁平化,使用分隔符连接嵌套密钥。字典列表序列化为 JSON 字符串。
语法
参数
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
d | Dict[str, Any] | 必需 | 要扁平化的字典 |
parent_key | str | "" | 预先附加到每个键的基本键 |
sep | str | "_" | 用于连接密钥之间的分隔符 |
返回
返回类型 | 描述 |
---|---|
Dict[str, Any] | 一个扁平化字典 |
示例
chdb.utils.infer_data_type
推断值列表的最合适数据类型。
此函数检查值列表并确定可以表示列表中所有值的最适合的数据类型。它考虑整数、无符号整数、十进制和浮点类型,如果值不能由任何数字类型表示或所有值为 None,则默认为“string”。
语法
参数
参数 | 类型 | 描述 |
---|---|---|
values | List[Any] | 要分析的值列表。值可以是任何类型 |
返回
返回类型 | 描述 |
---|---|
str | 一个表示推断数据类型的字符串。可能的返回值为:”int8”、 “int16”、 “int32”、 “int64”、 “int128”、 “int256”、 “uint8”、 “uint16”、 “uint32”、 “uint64”、 “uint128”、 “uint256”、 “decimal128”、 “decimal256”、 “float32”、 “float64” 或 “string”。 |
- 如果列表中的所有值都是 None,函数返回“string”。
- 如果列表中的任何值是字符串,函数将立即返回“string”。
- 函数假定数值可以根据其范围和精度表示为整数、十进制或浮点数。
chdb.utils.infer_data_types
推断列式数据结构中每列的数据类型。
此函数分析每列中的值并根据数据的示例推断每列的最适合数据类型。
语法
参数
参数 | 类型 | 默认 | 描述 |
---|---|---|---|
column_data | Dict[str, List[Any]] | 必需 | 一个字典,其中键是列名,值是列值的列表 |
n_rows | int | 10000 | 用于类型推断的样本行数 |
返回
返回类型 | 描述 |
---|---|
List[tuple] | 一个元组列表,每个元组包含一个列名及其推断数据类型 |
抽象基类
class chdb.rwabc.PyReader
(data: Any)`
基类: ABC
abstractmethod read
从给定列读取指定数量的行并返回对象列表,每个对象是列值的序列。
参数
参数 | 类型 | 描述 |
---|---|---|
col_names | List[str] | 要读取的列名列表 |
count | int | 最大读取行数 |
返回
返回类型 | 描述 |
---|---|
List[Any] | 按列返回的序列列表 |
class chdb.rwabc.PyWriter
基类: ABC
abstractmethod finalize
组装并返回来自区块的最终数据。必须由子类实现。
返回
返回类型 | 描述 |
---|---|
bytes | 最终序列化的数据 |
abstractmethod write
将数据列保存到区块中。必须由子类实现。
参数
参数 | 类型 | 描述 |
---|---|---|
col_names | List[str] | 正在写入的列名列表 |
columns | List[List[Any]] | 列数据列表,每列由一个列表表示 |
异常处理
class chdb.ChdbError
基类: Exception
chDB 相关错误的基本异常类。
当 chDB 查询执行失败或遇到错误时,引发此异常。它继承自标准 Python Exception 类,并提供来自底层 ClickHouse 引擎的错误信息。
异常消息通常包含来自 ClickHouse 的详细错误信息,包括语法错误、类型不匹配、缺少表/列及其他查询执行问题。
变量
变量 | 类型 | 描述 |
---|---|---|
args | - | 包含错误消息及其他附加参数的元组 |
示例
当底层 ClickHouse 引擎报告错误时,此异常由 chdb.query() 和相关函数自动引发。 您应在处理可能失败的查询时捕获此异常,以在您的应用程序中提供适当的错误处理。
版本信息
chdb.chdb_version = ('3', '6', '0')
内置不可变序列。
如果未给出参数,构造函数返回一个空元组。 如果指定了可迭代对象,则元组从可迭代对象的项初始化。
如果参数是一个元组,则返回值是相同的对象。
chdb.engine_version = '25.5.2.1'
从给定对象创建一个新的字符串对象。如果指定了编码或错误,则对象必须暴露一个数据缓冲区,该缓冲区将使用给定的编码和错误处理程序进行解码。否则,返回对象.str()(如果定义)或 repr(object)的结果。
- 编码默认为 ‘utf-8’。
- 错误默认为 ‘strict’。
chdb.__version__ = '3.6.0'
从给定对象创建一个新的字符串对象。如果指定了编码或错误,则对象必须暴露一个数据缓冲区,该缓冲区将使用给定的编码和错误处理程序进行解码。否则,返回对象.str()(如果定义)或 repr(object)的结果。
- 编码默认为 ‘utf-8’。
- 错误默认为 ‘strict’。