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

如何多次迭代pyodbc查询得到的SQL Server结果集?

问题解决:Python中SQL Server游标结果的多次迭代

你遇到的问题是因为cursor.execute()返回的游标对象是单向迭代器——它只能被遍历一次,遍历完成后游标指针就停在了结果集的末尾,没有更多数据可以读取,所以第二次循环没有输出。

解决这个问题有两种常用方案:

方案1:将结果转换为列表(推荐)

把游标返回的结果一次性读取到列表中,列表是可重复迭代的容器,这样就能多次遍历数据:

query = "SELECT PN, PD, VT FROM inpat"
cursor.execute(query)
# 用fetchall()获取所有结果并转为列表
data = cursor.fetchall()

# 第一次迭代
for i in data:
    print(i)

# 第二次迭代,正常输出
for j in data:
    print(j)

这种方法操作简单,后续多次迭代的效率很高,适合数据量不大的场景。如果数据量特别大,一次性加载到内存可能有压力,可以考虑第二种方案。

方案2:重新执行查询

每次需要迭代时重新执行SQL查询,让游标回到结果集的起始位置:

def get_inpat_data(cursor):
    query = "SELECT PN, PD, VT FROM inpat"
    cursor.execute(query)
    return cursor

# 第一次迭代
for i in get_inpat_data(cursor):
    print(i)

# 第二次迭代,重新执行查询获取新的游标
for j in get_inpat_data(cursor):
    print(j)

这种方法适合超大数据集,避免一次性占用过多内存,但会增加数据库的查询次数,性能开销更大,按需选择。

内容的提问来源于stack exchange,提问作者S M Shamimul Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:24:03