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 guild_stats.py

Python Discord OAuth2 - Guild.Join(加入公会)

TypeError:无法读取未定义的 guild.roles 的属性“获取”

discord python:guild.members只返回bot但没有成员[重复]

我是不是正确使用了 on_guild_leave 函数?

wamp中修改后mysq数据库l闪退无法登陆解决办法