You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:27:12