Не удаляется запись из базы данных sqlite
Код ниже отправляет администратору бота список акций из бд:
async def del_callback_run_sale(callback_query: types.CallbackQuery):
await delete_command_sale(callback_query.data.replace('del ', ''))
await callback_query.answer(text=f'{callback_query.data.replace("del ", "")} удалена', show_alert=True)
async def sale_list(message: types.Message):
if message.from_user.id == ID:
read = await read_sale()
for rec in read:
await bot.send_photo(message.from_user.id, rec[0], f'Название:{rec[1]}\nОписание:{rec[2]}')
await bot.send_message(message.from_user.id, text='***', reply_markup=InlineKeyboardMarkup().add(
InlineKeyboardButton(f'Удалить {rec[1]}', callback_data=f'del {rec[1]}')
))
await message.reply('Хотите добавить акцию?',
reply_markup=ReplyKeyboardMarkup().add(KeyboardButton('Добавить акцию')))
Вот сама функция удаления записи:
async def delete_command_sale(data):
cur.execute('DELETE FROM sale WHERE name == ?', (data,))
base.commit()
Хэндлеры зарегистрированы, названия таблицы и поля записаны корректно. Код выполняется без ошибок.
Также привожу код для взаимодействия с другой таблицей, который работает корректно:
async def del_callback_run_menu(callback_query: types.CallbackQuery):
await delete_command_menu(callback_query.data.replace('del ', ''))
await callback_query.answer(text=f'{callback_query.data.replace("del ", "")} удалена', show_alert=True)
async def delete_food(message: types.Message):
if message.from_user.id == ID:
read = await read_menu()
for rec in read:
await bot.send_photo(message.from_user.id, rec[3], f'Тип:{rec[0]}\nКласс:{rec[1]}\nНазвание:{rec[2]}\n'
f'Цена:{rec[4]}\nИнгридиенты:{rec[5]}')
await bot.send_message(message.from_user.id, text='***', reply_markup=InlineKeyboardMarkup().add(
InlineKeyboardButton(f'Удалить {rec[2]}', callback_data=f'del {rec[2]}')
))
Функция удаления из menu
async def delete_command_menu(data):
cur.execute('DELETE FROM menu WHERE name == ?', (data,))
base.commit()
Создание таблиц в бд:
def sqlite_start():
global base, cur
base = sq.connect('db_name.db')
cur = base.cursor()
if base:
print('Data base connected')
base.execute('CREATE TABLE IF NOT EXISTS menu(type TEXT,cls TEXT, name TEXT PRIMARY KEY, '
'img TEXT, price TEXT, ingridients TEXT)')
base.execute('CREATE TABLE IF NOT EXISTS drinks(type TEXT,cls TEXT, name TEXT PRIMARY KEY, '
'img TEXT, price TEXT, ingridients TEXT)')
base.execute('CREATE TABLE IF NOT EXISTS sale(img TEXT, name TEXT PRIMARY KEY, desc TEXT)')
Ответы (1 шт):
Автор решения: mgodunow
→ Ссылка
Ошибка была в регистрации хендлеров
dp.register_callback_query_handler(del_callback_run_drinks, lambda x: x.data and x.data.startswith('del '))
dp.register_callback_query_handler(del_callback_run_menu, lambda x: x.data and x.data.startswith('del '))
dp.register_callback_query_handler(del_callback_run_sale, lambda x: x.data and x.data.startswith('del '))
Три callback функции реагировали на одно и тоже. Исполнялась самая верхняя, то есть del_callback_run_drinks.
Фикс такой
dp.register_callback_query_handler(del_callback_run_menu, lambda x: x.data and x.data.startswith('del_menu '))
dp.register_callback_query_handler(del_callback_run_drinks, lambda x: x.data and x.data.startswith('del_drinks '))
dp.register_callback_query_handler(del_callback_run_sale, lambda x: x.data and x.data.startswith('del_sale '))`
P.S Те люди, что пытались помочь, сорян за неполный код.