如何多次迭代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
相关产品推荐
相关产品推荐

