我试图通过用户输入将值插入到数据库中。以下代码无需用户输入即可运行:
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.")发布于 2019-12-06 00:48:51
我已经在我的一些项目中使用过mysql和discord机器人,所以我可以在这里给你一些见解。
首先,您不应该在mycursor.execute或mydb.commit()调用中使用await。
其次,我编写代码的方式有点不同,尽管这是值得的,但我知道它应该可以工作。我有一个SQLCmds.py文件,它被导入到主要的discord bot 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函数。这将使整个过程对您来说更加简单。
https://stackoverflow.com/questions/59185094
复制相似问题