Подтвердить что ты не робот

О курсоре и итераторе mysql

Представьте, что у меня есть курсор mysql и чтение данных. Количество данных может быть очень большим, что я хочу иметь дело с одной строкой каждый раз.

Легкий и прямой способ может быть таким:

while True:
    row = cursor.fetchone()
    if not row: break
    .....

но это не выглядит хорошо, поэтому я задаюсь вопросом, работает ли этот способ, как предполагалось:

for row in iter(cursor.fetchall())

то, что я хочу знать, это: если я использую способ iter(cursor.fetchall()), он сначала извлекает все данные или просто извлекает одну строку за раз?

Любая идея приветствуется.

ТНХ

4b9b3361

Ответ 1

Класс курсора MySQLdb реализует протокол итератора, поэтому вы можете просто сделать это:

cursor.execute(sql)
for row in cursor:
    print row
    ...

Соответствующий код из MySQLdb.cursors.BaseCursor:

def __iter__(self):
    return iter(self.fetchone, None)