Как удалить конкретную строку из базы данных Sqlite3
Пишу бота, в нем присутствует регистрация. Пользователь вписывает свои фио, далее отправляет контакт, откуда считывается номер и ID:
@dp.message_handler(Text(equals="Регистрация"), state=None)
async def cm_start(message : types.Message):
await FSMadmin.fio.set()
await bot.send_message(message.from_user.id, 'Напишите Ваше полные имя, фамилию и отчество(если есть) через пробел', reply_markup=ReplyKeyboardRemove())
@dp.message_handler(state=FSMadmin.fio)
async def cm_fio(message : types.Message, state=FSMContext):
async with state.proxy() as data:
data['fio'] = message.text
await FSMadmin.read_number.set()
await bot.send_message(message.from_user.id, 'Теперь добавим Ваш номер в базу данных. Для этого нажмите кнопку на клавиатуре', reply_markup=client_kb.kb_read_numder)
@dp.message_handler(content_types=types.ContentType.CONTACT,state=FSMadmin.read_number)
async def cm_number(message : types.Message, state=FSMContext):
async with state.proxy() as data:
data['read_number'] = message.contact['phone_number']
data['id'] = message.contact['user_id']
await sql_db.sql_add_command(state)
await state.finish()
await bot.send_message(message.from_user.id, 'Регистрация в базе данных завершена, ожидайте ответа от HR-службы по Вашей кандидатуре', reply_markup=ReplyKeyboardRemove())
Админ эти данные может просматривать:
@dp.message_handler(Text(equals="Сотрудники"))
async def command_sotrudniki(message : types.Message):
if message.from_user.id == ADMIN_ID:
await bot.send_message(message.from_user.id,'Список зарегистрировавшихся сотрудников: ', reply_markup=admin_kb.kb_two)
await sql_db.sql_read(message)
elif message.from_user.id == ADMIN_THREE_ID:
await bot.send_message(message.from_user.id,'Список зарегистрировавшихся сотрудников: ', reply_markup=admin_kb.kb_two)
await sql_db.sql_read(message)
else:
await message.answer('Нет такой команды, воспользуйтесь клавиатурой')
Код самой базы данных:
def sql_start():
global base, cur
base = sq.connect('sotrudniki.db')
cur = base.cursor()
if base:
print('Data base connected OK!')
base.execute('CREATE TABLE IF NOT EXISTS sotrudniki(fio, number, id)')
base.commit()
async def sql_add_command(state):
async with state.proxy() as data:
cur.execute('INSERT INTO sotrudniki VALUES (?, ?, ?)', tuple(data.values()))
base.commit()
async def sql_read(message):
for ret in cur.execute('SELECT * FROM sotrudniki').fetchall():
await bot.send_message(message.from_user.id, f'{ret[0]}\nНомер пользователя: {ret[1]}\nID пользователя: {ret[2]}', reply_markup=admin_kb.inl_kb_delete)
async def sql_delete(data):
cur.execute('DELETE FROM sotrudniki WHERE id == ?', (data, ))
base.commit
Если записей много, кнопка "Удалить запись" будет под каждой записью. Как ее заставить работать? Чтобы при нажатии на кнопку удалялась именно та запись, под которой была нажата кнопка?
