Изменение всех индексов в таблице базы данных

У меня есть таблица базы данных SQlite3:

shop_cursor.execute("""CREATE TABLE IF NOT EXISTS shop (
        id INT,
        name TEXT,
        price INT
        )""")

Когда я удаляю одну из строк в таблице, мне нужно изменить все id у всех строк в таблице. Например, у меня есть такая таблица:

[(1, 'Фрукты', 100), (2, 'Овощи', 250), (3, 'Злаки', 150), (4, 'Сладости', 350)]

Я удаляю строку 'Овощи' и хочу, чтобы у всех строк поменялось первое значение id, тоесть у 'Фрукты', осталась 1, у 'Злаки', поменялась 3 на 2, у 'Сладости', поменялась 4 на 3 и т.д. Как это можно реализовать?


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

Автор решения: Sergey Tatarincev

В комментариях в целом описали что затея нелепая, тем не менее, если сильно хочется...

name_to_delete = 'Овощи'
cursor = db.cursor()
# Получаем id для удаляемой записи
cursor.execute("select id from shop where name=?", (name_to_delete,))
id_to_delete = cursor.fetchone()[0]
# Удаляем запись
db.execute(f'delete from shop where id=?', (id_to_delete,))
# Для всех элементов с id>удаленного уменьшаем на единицу id
db.execute(f'update shop set id=id-1 where id>?', (id_to_delete,))
→ Ссылка