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

dav*_*ave 6 python sql pyodbc

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

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

Pet*_*per 14

当然 - 使用while循环fetchone.

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

row = cursor.fetchone()
while row is not None:
    # do something
    row = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)


小智 8

根据官方文档,游标显然是一个迭代器。因此,您不需要创建自定义迭代器/生成器。

如果您打算一次处理一行,您可以使用游标本身作为迭代器:

cursor.execute("select user_id, user_name from users"):
for row in cursor:
    print(row.user_id, row.user_name)
Run Code Online (Sandbox Code Playgroud)


Bra*_*rad 6

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

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