Python 'guild' 无法转换为 MySQL 类型
Posted
技术标签:
【中文标题】Python \'guild\' 无法转换为 MySQL 类型【英文标题】:Python 'guild' cannot be converted to a MySQL typePython 'guild' 无法转换为 MySQL 类型 【发布时间】:2021-11-14 10:54:16 【问题描述】:我正在尝试为我的 discord.py 机器人创建一个欢迎系统,该系统必须是特定于服务器的。但是,当我尝试输入公会 ID 时,它会引发此错误。我对 mysql 还很陌生,因此我们将不胜感激。
错误:
Traceback (most recent call last):
File "C:\Users\user-pc\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 994, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\user-pc\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 1448, in invoke
await ctx.invoked_subcommand.invoke(ctx)
File "C:\Users\user-pc\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 894, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:\Users\user-pc\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 176, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ProgrammingError: Failed processing format-parameters; Python 'guild' cannot be converted to a MySQL type
这是我的代码:
@welcome.command()
@has_permissions(administrator=True)
async def channel(self, ctx, channel:discord.TextChannel):
cursor.execute(f'SELECT channel_id FROM welcome WHERE guild_id = ctx.guild.id')
result = cursor.fetchone()
if result is None:
cursor.execute('INSERT INTO welcome (guild_id, channel_i) VALUES (%s,%s)', (ctx.guild, channel.id))
#values = (ctx.guild, channel.id)
db.commit()
#values = (ctx.guild.id, channel.id)
await ctx.send(f'Welcome channel has been set to channel.mention')
elif result is not None:
cursor.execute('UPDATE welcome SET channel_id = %s WHERE guild_id = %s', (channel.id, ctx.guild))
db.commit()
#values = (channel.id, ctx.guild.id)
await ctx.send(f'Welcome channel has been updated to channel.mention')
cursor.close()
db.close()
【问题讨论】:
【参考方案1】:sql 需要一个 id (guild_id
),因此您的代码应该使用 ctx.guild.id
而不是 ctx.guild
(在哪里使用),因为 ctx.guild
是一个没有 MySQL 模拟的 Python 对象。
【讨论】:
好的,谢谢我改变了它,但现在我收到一个错误,说Cursor not connected
,但我不明白为什么它不会连接。它给了我这一行的错误,cursor.execute(f'SELECT channel_id FROM welcome WHERE guild_id = ctx.guild.id')
这是一个不同的问题,您必须正确初始化光标并使其在您的函数中可用。在任何情况下,您都可以发布另一个问题以上是关于Python 'guild' 无法转换为 MySQL 类型的主要内容,如果未能解决你的问题,请参考以下文章
Python Discord OAuth2 - Guild.Join(加入公会)
TypeError:无法读取未定义的 guild.roles 的属性“获取”