有没有办法检查 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检查一个元素在视口中是不是可见? [复制]