我正在构建一个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
上有语法错误。你知道吗
我可以将表名设置为变量而不获取语法错误吗?如果是,我怎么做?你知道吗
如果您知道字符串列表
TableNames
包含安全输入(或不包含任何用户输入),则可以在将查询字符串传递给execute
之前,直接在Python中格式化相关子字符串(例如表名)的查询字符串。你知道吗否则,您可能需要执行dynamic query/command using PL/pgSQL。你知道吗
现在,我用一个很重的清单来解决我的问题:
与
Globals.FetchARCDB[Globals.Dinosaurs.index(Dino)]
等于"UPDATE utah SET utah = $1 WHERE user_id = $2"
这可以工作,但需要一个非常大的列表,需要手动设置(使用循环,但仍然非常注释…)
相关问题 更多 >
编程相关推荐