有没有办法检查 MySQL 字典的元素是不是包含特定的整数?

Posted

技术标签:

【中文标题】有没有办法检查 MySQL 字典的元素是不是包含特定的整数?【英文标题】:Is there a way to check if a MySQL dictionary's element contains a specific integer?有没有办法检查 MySQL 字典的元素是否包含特定的整数? 【发布时间】:2021-12-04 19:39:36 【问题描述】:

我的 discord 机器人中有一个日志系统,我想制作一个允许您忽略频道的系统,但我坚持使用它。 目前我有这个代码:

cursor=db.cursor(dictionary=True)
cursor.execute(f"SELECT * FROM `logexclude` WHERE server=int(before.guild.id)")
excluded = cursor.fetchall()
for i in excluded:
    if before.channel.id in i[1]: return

excluded 是一个列表,它看起来像这样: ['server': 890248334542008321, 'channel_ids': 890248758875533322, 'user_ids': 0, 'role_ids': 0]

但是,当我尝试访问它的第一个元素 (excluded[0]) 时,它只会给我一个错误:

    if before.channel.id in i[1]: return
TypeError: 1

【问题讨论】:

如果excluded 中的每个元素都是dictionary,那么你怎么能期望像list (i[1]) 那样解析它们。您应该使用 i[channel_ids] 之类的键解析它们。默认情况下,它们应该是list,但是当调用db.cursor() 函数时,dictionary 标志设置为True,即cursor=db.cursor(dictionary=True) 你所说的“字典元素”到底是什么意思? 【参考方案1】:

字典将其数据存储在键:值对中,因此您只能通过键(或值)访问它们。你不能通过索引访问它们,有问题。

cursor=db.cursor(dictionary=True)
cursor.execute(f"SELECT * FROM `logexclude` WHERE server=?", (before.guild.id))
excluded = cursor.fetchall()
for i in excluded:
    if i['channel_ids'] == before.channel.id: 
         return

这应该可行。

P。 S.查询和参数最好用问号(?)、here's described why分隔。

P。 S.S.如果你想在channel_id中存储多个频道,你应该为你的数据库使用一对多的关系。

【讨论】:

你认为这行得通吗? if 块将失败,因为 i['channel_ids']int,而不是 iterable object。您需要使用== 进行检查。 实际上,我们可以放弃if,检查我们是否稍微调整查询,例如cursor.execute(f"SELECT * FROM `logexclude` WHERE channel_ids=?", (before.channel.id)),即使用channel id,而不是根据guild id获取数据。 @kite 感谢您注意到我在代码中的错误,我已经编辑了我的答案。

以上是关于有没有办法检查 MySQL 字典的元素是不是包含特定的整数?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法只使用javascript检查一个元素在视口中是不是可见? [复制]

iOS:有没有办法检查 NSArray 对象是不是包含某个字符?

检查字典是不是包含 Swift 中的值

如何检查Mysql中是不是存在数组元素?

检查列表是不是包含与某些东西不同的元素[重复]

如何检查表是不是包含Lua中的元素?