LINUX.ORG.RU

История изменений

Исправление Novator, (текущая версия) :

Во-первых, чтобы экономить ОЗУ, в массив выгружай не все поля, а только id:

cur.execute("select id from files")
Если файл небольшой, то уже этого хватит.
Во-вторых, выборку запрашивай сразу сортированную, так удобнее искать «провалы»:
cur.execute("select id from files order by id")
(хотя, если id ключевой индекс, то не обязательно)
В-третьих, если файл большой, можешь ограничить число записей:
lim=1000
cur.execute("select id from files limit ? order by id", [lim])
В-четвертых, следующую порцию выбирай по граничному условию:
lim=1000
firstid=max_id_from_previous_array
cur.execute("select id from files where id > ? limit ? order by id", [firstid,lim])
max_id_from_previous_array - для первой итерации 0, для следущей - максимум у предыдущей.

Другой вариант, без limit - просто увеличивать диапазоны:

firstid=max_id_from_previous_array
lastid=max_id_from_previous_array+1000
cur.execute("SELECT id FROM files WHERE id > ? AND id <= ? ORDER BY id ASC", [firstid,lastid])

Импровизируй :)

Исходная версия Novator, :

Во-первых, чтобы экономить ОЗУ, в массив выгружай не все поля, а только id:

cur.execute("select id from files")
Если файл небольшой, то уже этого хватит.
Во-вторых, выборку запрашивай сразу сортированную, так удобнее искать «провалы»:
cur.execute("select id from files order by id")
(хотя, если id ключевой индекс, то не обязательно)
В-третьих, если файл большой, можешь ограничить число записей:
lim=1000
cur.execute("select id from files limit ? order by id", [lim])
В-четвертых, следующую порцию выбирай по граничному условию:
lim=1000
firstid=max_id_from_previous_array
cur.execute("select id from files where id > ? limit ? order by id", [firstid,lim])

Другой вариант, без limit - просто увеличивать диапазоны:

firstid=max_id_from_previous_array
lastid=max_id_from_previous_array+1000
cur.execute("SELECT id FROM files WHERE id > ? AND id <= ? ORDER BY id ASC", [firstid,lastid])

Импровизируй :)