如何将DuckDBPyRelation高效转为Python字符串形式的CSV?
将DuckDBPyRelation转为CSV字符串(无临时文件、无额外依赖)
可以利用DuckDB内置的copy_to方法结合Python标准库的io.StringIO实现,全程无需临时文件,也不依赖pandas/Polars/PyArrow等第三方库,效率和DuckDB原生导出一致。
实现步骤
- 导入Python标准库
io和duckdb - 创建
io.StringIO内存缓冲区,用于存储CSV内容 - 调用
duckdb.copy_to()将关系对象直接写入缓冲区,指定CSV格式 - 重置缓冲区指针并读取内容,得到最终的CSV字符串
代码示例
import io import duckdb # 假设rel是已有的DuckDBPyRelation对象 buf = io.StringIO() # 将rel导出为CSV到缓冲区,header=False可关闭表头输出 duckdb.copy_to(rel, buf, format="csv", header=True) # 重置缓冲区指针到起始位置 buf.seek(0) # 获取最终CSV字符串 csv_str = buf.getvalue() # 输出示例:'a\n1\n2\n3\n' print(repr(csv_str))
补充说明
copy_to是DuckDB原生API,用内部逻辑处理CSV导出,性能远高于手动拼接数据io.StringIO是内存级缓冲区,全程无磁盘IO,比临时文件读写高效- 可通过
delimiter参数指定分隔符(默认逗号)、quote参数设置引号规则等,和DuckDB原生CSV导出参数完全一致
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

