Есть код. Пользователь нажимает на кнопку "✏ учителя" и ему отправляет список преподавателей вместе с кнопкой "Изменить" под каждым из них. После нажатия бот спрашивает у пользователя новые значения (Имя,Фамилия,Отчество,Предмет,Кабинет ) и должен сохранять их в базу данных в таблицу "teachers", но увы не обновляет старые значения.
Код в файле admin.py:
#___________________________________________ИЗМЕНЕНИЕ УЧИТЕЛЯ___________________________________________________________
@dp.message_handler(lambda message: '✏ учителя' in message.text)
async def edit_teachers_handler(message: types.Message):
if message.from_user.id == ID:
# Получение всех учителей из базы данных
teachers = await sqlite_db.get_teachers()
if teachers:
for teacher in teachers:
teacher_info = f"ФИО: {teacher['first_name']} {teacher['last_name']} {teacher['patronymic']}\n"
teacher_info += f"Предмет: {teacher['subject']}\n"
teacher_info += f"Кабинет: {teacher['classroom']}\n\n"
# Создание кнопки "Изменить" с идентификатором преподавателя
edit_button = types.InlineKeyboardButton('Изменить', callback_data=f"edit_teacher:{teacher['id']}")
keyboard = types.InlineKeyboardMarkup().add(edit_button)
await bot.send_message(message.chat.id, teacher_info, reply_markup=keyboard)
else:
await bot.send_message(message.chat.id, "Список учителей пуст.")
@dp.callback_query_handler(lambda query: query.data.startswith("edit_teacher:"))
async def edit_teacher_handler(query: types.CallbackQuery):
teacher_id = query.data.split(":")[1]
if query.from_user.id == ID:
# Запрашиваем новые данные о преподавателе
await bot.send_message(query.from_user.id, "Введите новые данные о преподавателе:")
await bot.send_message(query.from_user.id, "Введите ФИО:")
await MyStates.waiting_for_fio.set() # Устанавливаем состояние ожидания ФИО
else:
await bot.send_message(query.from_user.id, "У вас нет прав для выполнения данной операции.")
@dp.message_handler(state=MyStates.waiting_for_fio)
async def process_fio(message: types.Message, state: FSMContext):
fio = message.text.split()
if len(fio) >= 3:
first_name = fio[0]
last_name = fio[1]
patronymic = " ".join(fio[2:])
await state.update_data(first_name=first_name, last_name=last_name, patronymic=patronymic)
await bot.send_message(message.chat.id, "Введите предмет:")
await MyStates.waiting_for_subject.set() # Устанавливаем состояние ожидания предмета
else:
await bot.send_message(message.chat.id, "Некорректный формат ФИО. Введите Фамилию, Имя и Отчество.")
@dp.message_handler(state=MyStates.waiting_for_subject)
async def process_subject(message: types.Message, state: FSMContext):
subject = message.text
await state.update_data(subject=subject)
await bot.send_message(message.chat.id, "Введите кабинет:")
await MyStates.waiting_for_classroom.set() # Устанавливаем состояние ожидания кабинета
@dp.message_handler(state=MyStates.waiting_for_classroom)
async def process_classroom(message: types.Message, state: FSMContext):
classroom = message.text
await state.update_data(classroom=classroom)
# Получаем данные из состояния
data = await state.get_data()
first_name = data.get('first_name')
last_name = data.get('last_name')
patronymic = data.get('patronymic')
subject = data.get('subject')
classroom = data.get('classroom')
# Получаем идентификатор преподавателя из message.text
teacher_id = message.text.split(":")[1] if len(message.text.split(":")) > 1 else None
# Сохраняем новые значения в базе данных
await sqlite_db.update_teacher(teacher_id, first_name, last_name, patronymic, subject, classroom)
# Отправляем подтверждение об изменении
await bot.send_message(message.chat.id, "Данные об учителе успешно изменены.")
await state.finish() # Завершаем состояние
Код в файле sqlite_db.py:
async def get_teachers():
cur.execute("SELECT * FROM teachers")
rows = cur.fetchall()
teachers = []
for row in rows:
teacher = {
'id': row[0],
'first_name': row[1],
'last_name': row[2],
'patronymic': row[3],
'subject': row[4],
'classroom': row[5]
}
teachers.append(teacher)
return teachers
async def update_teacher(teacher_id, first_name, last_name, patronymic, subject, classroom):
cur.execute("UPDATE teachers SET Surname=?, Name=?, Lastname=?, Subject=?, KB=? WHERE id=?",
(last_name, first_name, patronymic, subject, classroom, teacher_id))
base.commit()