О MySQL курсор и итератор - PullRequest
22 голосов
/ 01 июня 2011

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

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

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

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

for row in iter(cursor.fetchall())

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

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

thx

1 Ответ

47 голосов
/ 01 июня 2011

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

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

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

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