Я не думаю, что есть способ изменить строки в таблице, кроме как через SQL - UPDATE или INSERT OR REPLACE.(Заманчиво подумать, что объект sqlite3.Row может разрешить присваивание, и записать обратно в строку, которую он представляет, но нет.)
Что касается выполнения ОБНОВЛЕНИЙ (через 2-й курсор), в то время как используется выдающийся курсордля оригинального SELECT - вы спрашиваете, является ли это плохой идеей - я не знаю, беспокоитесь ли вы о правильности или производительности (правильность: курсор запутывается и не выполняет итерацию всех строк, которые он должен выполнить ровно один раз;производительность: курсор выполняет итерацию всех строк ровно один раз, но есть куча дорогих дополнительных запросов)?
Корректность WRT, это, кажется, работает нормально - я только что сделал быстрый тест, где я создал двакурсоры c1 и c2, затем на c1 выполнили команду SELECT, затем на c2 выполнили команду UPDATE, влияющую на те же строки, а затем посмотрели на результат c1.fetchall ().Он по-прежнему содержал все правильные строки, хотя данные в первой строке были устаревшими (вероятно, извлечены с помощью исходного запроса), а данные в более поздних строках были обновлены (вероятно, извлечены только с помощью fetchall после обновления).
(Кроме того, если UPDATE на c2 влияет на то, какие записи будут возвращены с помощью SELECT на c1, такие записи больше не будут выбираться, но очевидно, что уже было выбрано все, что было выбрано, и снова курсор.первая запись немедленно, поэтому, используя тот же порядок команд, что и выше, и с командой UPDATE, которая заставит исходный SELECT ничего не найти, более поздняя функция c1.fetchall () по-прежнему возвращает одну запись.)
Что касается производительности,Я не знаю - из предыдущего абзаца мне кажется, что он должен повторить запрос, который может или не может быть дорогим в зависимости от запроса.(Возможно, это не буквальное повторение; возможно, эта работа откладывается до фактического получения в любом случае.)
Короткая история: я не думаю, что есть другой способ сделать это без ОБНОВЛЕНИЯ или ЗАМЕНЫ, и я думаю, что этобудет работать нормально, чтобы сделать эти ОБНОВЛЕНИЯ, даже при выполнении итерации на исходном курсоре.