На самом деле нет способа вовлечь в это понимание списка. Вам нужен цикл, который заканчивается, когда возвращается значение часового. К счастью, Python обеспечивает это:
for row in iter(cursor.fetchone, None):
process(row)
С двумя аргументами iter()
принимает вызываемое и значение часового, которое завершит итерацию. Это немного изотерически, поэтому мало кто будет жаловаться, если вы вместо этого будете использовать все еще более распространенное:
while True:
row = cursor.fetchone()
if row is None:
break
process(row)
(И действительно, этот стиль был обычным даже для построчного чтения файла, прежде чем мы сделали обобщенную итерацию.)
Некоторые модули DB-API (включая, по-видимому, теперь MySQLdb) также делают итераторы непосредственно итерируемыми, например:
for row in cursor:
process(row)
Это, очевидно, самое красивое решение, когда оно доступно:)