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

如何检查MySQL返回字典元素是否含指定整数,解决Discord机器人频道忽略功能报错

错误原因

  • 你创建游标时指定了dictionary=True,cursor.fetchall()返回的每条记录是字典结构,只能通过字段名(键名)访问值,不能用数字下标i[1]访问,这是报错的直接诱因。
  • 即使正确取值,从你给出的示例数据来看channel_ids字段存储的是单个整数,in运算符要求右侧为可迭代对象(列表、元组、集合等),直接对单个整数调用in判断也会触发类型错误。

解决方案

方案1:适配你当前的表结构(单条记录存1个排除频道ID)

直接通过字段名取值,做相等判断即可,同时建议把SQL拼接改成参数化查询,避免SQL注入风险:

cursor = db.cursor(dictionary=True)
# 用参数化查询替代f字符串拼接SQL
cursor.execute("SELECT * FROM `logexclude` WHERE server=%s", (int(before.guild.id),))
excluded = cursor.fetchall()
for i in excluded:
    if before.channel.id == i['channel_ids']:
        return

方案2:如果你需要单条记录存多个排除频道ID

你需要先调整表结构,把channel_ids字段改为JSON类型,存储频道ID的数组,取值后转成列表再做in判断:

import json

cursor = db.cursor(dictionary=True)
cursor.execute("SELECT * FROM `logexclude` WHERE server=%s", (int(before.guild.id),))
excluded = cursor.fetchall()
for i in excluded:
    excluded_channels = json.loads(i['channel_ids']) if i['channel_ids'] else []
    if before.channel.id in excluded_channels:
        return

内容的提问来源于stack exchange,提问作者Pearoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:15:04