Как удалить строку в SQLite, чтобы не удалить "индекс"

Не смогла корректно ввести запрос в гугл, поэтому пишу сюда

Есть база данных со строками:

id - с первичным ключом
gender 
age 
color_hair и тд с данными о пользователях

При определенных условиях нужно удалять строки с данными о пользователях, соответственно вместе с ними будет удаляться id с "порядковым номером" пользователя, то есть на старте есть таблица:

1 мужской 20 темный
2 женский 15 светлый
3 женский 30 рыжий

После удаления второй строки остается:

1 мужской 20 темный
3 женский 30 рыжий

Можно ли как-то сделать, чтобы осталось:

1 мужской 20 темный
2 женский 30 рыжий

Нужно это для того, что внутри программы запускается цикл по id и выполняются определенные операции, соответственно, если ставлю цикл

for i in range(len(количество строк))

То количество строк остается 2, но присутствует id == 3, не могу c данными работать по id == i

А если сначала получить данные, например, в переменную string о всех строках, а потом их обрабатывать, то:

for i in sting

Не могу обращаться по id к строкам, а мне это нужно в моей задаче

Сама задача:

Есть написанный Telegram-бот, который подбирает кастинги по заданным характеристикам для моделей. Есть таблица с характеристиками моделей, которая заполняется по мере работы пользователя с ботом, есть таблица с кастингами, которую заполняют менеджеры также через бота

Таблицы идентичны по виду, так как заполнение происходит по кнопкам, то есть таблица кастингов выглядит:

id (номер кастинга)
casting
gender
age и тд (данные, которые указаны в кастинге)

В отдельных строках они, потому что по ним идет сравнение с характеристиками моделей.

Каждые два дня старые кастинги должны удаляться, что и приводит к сдвигу по id (для меня проще называть "порядковому номеру кастинга"), но когда пользователь нажимает кнопку "Найти кастинг", должен сработать цикл, бегущий по всем кастингам, а по id кастинга, который равен счетчику цикла, происходит работа с данными (сверяются на соответствие с данными пользователя)

Бот функционировал ранее без проблем, сейчас просто происходит его улучшение и расширение, в связи с чем столкнулась с необходимостью работать по id, а не по тексту кастинга, как ранее

Не знаю, понятно ли смогла задать вопрос, буду рада помощи!

Заранее спасибо!


Ответы (1 шт):

Автор решения: nyekitka

Если удаление будет происходить по одному элементу, то тогда это можно сделать следующим образом:

#для примера сделаю список из id
ids = [1, 2, 7, 9]
for id in ids:
    cursor.execute("DELETE FROM table WHERE id = ?", (id,))
    cursor.execute("UPDATE table SET id = id - 1 WHERE id > ?", (id, ))
    db.commit()
→ Ссылка