Telegram Bot操作MySQL触发IndexError: tuple index out of range求助
解决Telegram Bot中MySQL删除操作后的IndexError问题
你遇到的IndexError: tuple index out of range核心原因是:DELETE语句执行后,cursor.fetchall()不会返回任何结果集,所以check_code是空元组(),此时访问check_code[0][0]必然报错。此外你的代码还有两个关键问题:SQL注入风险、逻辑判断逻辑错误,下面给出完整修复方案:
1. 核心错误修复:用受影响行数判断删除结果
执行DELETE后,通过cursor.rowcount可以直接获取被删除的行数——如果行数大于0,说明目标用户存在并删除成功;如果是0,说明没有匹配的用户。
2. 修复SQL注入风险
不要用字符串拼接生成SQL语句,改用参数化查询,这是避免SQL注入的标准做法。
3. 简化冗余代码
你先把输入存到state又立刻取出的操作完全没必要,可以直接使用message.text处理。
修正后的完整代码
@dp.message_handler(state=dataBase.user1) async def user_code(message: types.Message, state: FSMContext): item = message.text.strip() # 去除前后空白,避免空输入 if not item: await bot.send_message(message.from_user.id, "请输入有效的代码!") return # 参数化查询,防止SQL注入 cursor.execute('DELETE FROM users WHERE code=%s', (item,)) # 提交事务(如果数据库连接未开启自动提交,必须加这一步) connection.commit() # 通过受影响行数判断删除结果 deleted_rows = cursor.rowcount if deleted_rows > 0: await bot.send_message(message.from_user.id, "用户已成功删除!") else: await bot.send_message(message.from_user.id, "不存在该用户!") await state.finish()
内容的提问来源于stack exchange,提问作者vvetta
相关产品推荐
相关产品推荐

