在python中使用prepared语句时出错

g52tjvyc  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(302)

每当我尝试运行一个普通的查询时,所有的工作都非常好。代码执行,我可以得到结果,但每当我尝试在python中使用准备好的语句时,总是会出现以下错误:

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? WHERE name = ?' at line 1

我要运行的代码:

cursor = con.db.cursor(prepared=True)
try:
   cursor.execute("SELECT * FROM %s WHERE name = %s", ('operations', 'check', ))
except mysql.connector.Error as error:
   print(error)
except TypeError as e:
   print(e)

我还尝试将tuple对象更改为string,并删除了其中一个'%s'以进行检查。但是我仍然得到一个'%s'synax的错误。
我尝试过的另一件事是使用dict对象,因此我将“%s”更改为“%(table)s”和“%(name)s”,并使用dict

{'table': 'operations', 'name': 'check'}

例子:

cursor.execute("SELECT * FROM %(table)s WHERE name = %(name)s", {'table': 'operations', 'name': 'check'})

但还是没用,我还是有例外
我错过什么了吗?
提前谢谢!
--------编辑--------
多亏了@khelwood,我解决了这个问题。正如@khelwood在注解中提到的,问题是因为我试图使用'%s'作为表名的参数。python编写的语句不能处理诸如表名之类的参数,因此引发了异常

7tofc5zh

7tofc5zh1#

不能将表名作为查询参数插入。可以将要查找的名称作为参数传递,但它应该位于元组中: ("check",) 所以

cursor.execute("SELECT * FROM operations WHERE name = %s", ("check", ))

相关问题