在没有fetchall()的情况下迭代PyoDBC结果

时间:2013-07-17 18:17:51

标签: python sql pyodbc

我正在尝试使用pyodbc处理一个非常大的查询,我需要迭代行而不用fetchall()一次性加载它们。

有没有一个好的和有原则的方法来做到这一点?

3 个答案:

答案 0 :(得分:12)

当然 - 使用whilefetchone

http://code.google.com/p/pyodbc/wiki/Cursor#fetchone

row = cursor.fetchone()
while row is not None:
    # do something
    row = cursor.fetchone()

答案 1 :(得分:6)

如果要批量提取,也可以使用cursor.fetchmany()(如果不覆盖,则默认为1)

http://code.google.com/p/pyodbc/wiki/Cursor#fetchmany

答案 2 :(得分:3)

根据official documentation,游标显然是一个迭代器。因此,您无需创建自定义迭代器/生成器。

如果您要一次处理一行,则可以将游标本身用作迭代器:

cursor.execute("select user_id, user_name from users"):
for row in cursor:
    print(row.user_id, row.user_name)