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

如何在InlineKeyboardButton中显示数据库数据?代码错误排查

问题排查与修复

核心错误点

  • 数据库查询结果是元组而非字符串:cur.execute返回的每一行是一个元组(比如("酷睿i9",)),直接赋值给text和callback_data会导致按钮显示异常,且callback_data不支持元组类型。
  • 循环内重复发送消息:每次循环都调用bot.send_message,会生成多条独立消息,而非一次性展示所有按钮的消息。

修复后的代码

elif call.data == "own1": 
    reply_markup1 = types.InlineKeyboardMarkup(row_width=2) 
    # 先遍历所有结果,把按钮都添加到键盘
    for value in cur.execute("SELECT name FROM Processor where category_g='gaming';"):
        # 取元组第一个元素,拿到字符串格式的处理器名称
        processor_name = value[0]
        item = types.InlineKeyboardButton(text=processor_name, callback_data=processor_name) 
        reply_markup1.add(item)
    # 所有按钮添加完成后,只发送一次消息
    bot.send_message(call.message.chat.id, "请选择处理器:", reply_markup=reply_markup1) 

关键修改说明

  • 从查询结果元组中提取字符串:用value[0]获取处理器名称的字符串值,避免按钮显示元组格式内容。
  • 调整消息发送时机:把bot.send_message移出循环,确保所有按钮都添加到键盘后,一次性发送带完整键盘的消息。

内容的提问来源于stack exchange,提问作者Алексей Крылов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:25:52