О курсоре и итераторе mysql
Представьте, что у меня есть курсор mysql и чтение данных. Количество данных может быть очень большим, что я хочу иметь дело с одной строкой каждый раз.
Легкий и прямой способ может быть таким:
while True:
row = cursor.fetchone()
if not row: break
.....
но это не выглядит хорошо, поэтому я задаюсь вопросом, работает ли этот способ, как предполагалось:
for row in iter(cursor.fetchall())
то, что я хочу знать, это: если я использую способ iter(cursor.fetchall())
, он сначала извлекает все данные или просто извлекает одну строку за раз?
Любая идея приветствуется.
ТНХ
Ответы
Ответ 1
Класс курсора MySQLdb
реализует протокол итератора, поэтому вы можете просто сделать это:
cursor.execute(sql)
for row in cursor:
print row
...
Соответствующий код из MySQLdb.cursors.BaseCursor:
def __iter__(self):
return iter(self.fetchone, None)