Как удалить строку в 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 шт):
Если удаление будет происходить по одному элементу, то тогда это можно сделать следующим образом:
#для примера сделаю список из 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()