Изменение всех индексов в таблице базы данных
У меня есть таблица базы данных 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,))