12

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

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

4

3 回答 3

19

当然 - 使用while带有fetchone.

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

row = cursor.fetchone()
while row is not None:
    # do something
    row = cursor.fetchone()
于 2013-07-17T18:36:55.583 回答
10

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

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

cursor.execute("select user_id, user_name from users"):
for row in cursor:
    print(row.user_id, row.user_name)
于 2020-01-14T16:30:27.080 回答
7

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

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

于 2013-07-17T18:56:43.903 回答