You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:47:10