SQL表中的变量更新discord.py b

2024-06-09 06:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个Discord bot(使用不和谐.py)连接到PostgreSQL数据库的。你知道吗

我有多个表,其中所有表名都存储在名为TableNames的字符串列表中。你知道吗

当我直接使用表名时,如下所示:

await self.bot.ARC.execute("UPDATE utah SET utah = $1 WHERE user_id = $2", True, message.author.id)

一切正常。你知道吗

但是当我尝试将表名设置为变量时,就像这样:

wait self.bot.ARC.execute("UPDATE $1 SET $2 = True WHERE user_id = $3", 'utah', 'utah', message.author.id)

我得到一个错误,说我在$1上有语法错误。你知道吗

我可以将表名设置为变量而不获取语法错误吗?如果是,我怎么做?你知道吗


Tags: selfidtruemessageexecutebotupdatewhere
2条回答

如果您知道字符串列表TableNames包含安全输入(或不包含任何用户输入),则可以在将查询字符串传递给execute之前,直接在Python中格式化相关子字符串(例如表名)的查询字符串。你知道吗

否则,您可能需要执行dynamic query/command using PL/pgSQL。你知道吗

现在,我用一个很重的清单来解决我的问题:

user = await self.bot.ARC.fetch(Globals.FetchARCDB[Globals.Dinosaurs.index(Dino)], member.id)

Globals.FetchARCDB[Globals.Dinosaurs.index(Dino)]等于"UPDATE utah SET utah = $1 WHERE user_id = $2"

这可以工作,但需要一个非常大的列表,需要手动设置(使用循环,但仍然非常注释…)

相关问题 更多 >