如何遍历DuckDB Python客户端中duckdb.sql返回的结果?
如何逐行处理DuckDBPyRelation类型的查询结果?
当你通过duckdb.sql()得到DuckDBPyRelation对象时,它无法直接用for循环迭代,但可以通过以下几种方式实现逐行处理:
方法1:使用iterator()创建流式迭代器
DuckDBPyRelation自带的iterator()方法会返回一个可迭代对象,能逐行读取数据,每一行以元组形式返回,适合大数据量场景(无需一次性加载全部数据到内存):
import duckdb employees = duckdb.sql("select * from 'employees.csv' ") for row in employees.iterator(): # 按索引访问列值,例如row[0]对应第一列 print(f"员工ID:{row[0]},姓名:{row[1]}")
方法2:转换为Pandas DataFrame后迭代
如果需要按列名灵活访问数据,可以用df()方法将结果转为Pandas DataFrame,再用DataFrame的迭代方法处理:
import duckdb import pandas as pd # 转换为DataFrame employees_df = duckdb.sql("select * from 'employees.csv' ").df() # 用iterrows()迭代(支持按列名访问) for idx, row in employees_df.iterrows(): print(f"姓名:{row['name']},部门:{row['department']}") # 用itertuples()迭代(性能更优,返回命名元组) for row in employees_df.itertuples(index=False): print(f"姓名:{row.name},部门:{row.department}")
方法3:用fetchall()获取所有行的列表
如果数据集较小,可以一次性将所有行取出为元组列表,再进行迭代:
import duckdb employees_rows = duckdb.sql("select * from 'employees.csv' ").fetchall() for row in employees_rows: print(row)
内容的提问来源于stack exchange,提问作者Moiz
相关产品推荐
相关产品推荐

