Discord.py 使用 mysql 连接器将值插入数据库



我正在尝试通过用户输入将值插入数据库。以下代码无需用户输入即可工作:

mycursor = mydb.cursor()
sql = "INSERT INTO DiscordData (UserID, Code) VALUES (%s, %s)"
val = ("1234", "foobar")
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")

但是,当我将代码传递到命令处理程序中以供用户输入时,不会插入数据:

@bot.command()
async def foo(message, arg):
if isinstance(message.channel, discord.DMChannel):
await message.send(arg)
mycursor = mydb.cursor()
sql = "INSERT INTO DiscordData (UserID, Code) VALUES (%s, %s)"
val = ("123", arg)
await mycursor.execute(sql, val)
await mydb.commit()
print(mycursor.rowcount, "record inserted.")

我已经在我的一些项目中使用了 mysql 和 discord 机器人,所以我可以在这里给你一些见解。

首先,您不需要在mycursor.executemydb.commit()调用上使用 await。

其次,我做代码的方式有点不同,把它当作它的价值,但我知道它应该有效。 我有一个 SQLCmds.py 文件,它被导入到主要的不和谐机器人 python 文件中。 SQLCmds.py 内部是将新信息放入MySQL数据库的所有必要功能。 因此,您不是在不和谐机器人的代码中调用 SQL 函数,而是调用类似于顶级代码的函数并传入机器人拥有的任何信息。

例如,这里有一个禁止的单词检查:

def checkBannedWord(banned_word):
mycursor.execute("SELECT filtered_to FROM banned_word_table WHERE banned_word = '"+str(banned_word).lower()+"'")
result = mycursor.fetchall()
if result != []:
return result[0][0]
else:
return False

在 discord 机器人的代码中,您将能够checkBannedWord(banned_word)并调用此 SQL 函数。这将使整个过程对您来说更加简单。

最新更新