我对使用pythonapi向mysql发送查询很陌生。
我的问题很容易复制。我有一个名为“component”的表,我想使用参数从python中选择行
如果我这样做了 cursor.execute("select * from ?",('ingredient',))
我收到错误消息: Error while connecting to MySQL Not all parameters were used in the SQL statement MySQL connection is closed
我知道我知道 cursor.execute("select * from ?",'ingredient')
我收到错误消息: Error while connecting to MySQL 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
同样的问题使用%s而不是?。在“成分”上使用其他类型的单引号而不是“成分”也不会给出结果。
这怎么行?
2条答案
按热度按时间ahy6op9u1#
不能将表名作为参数传递给查询。参数化机制用于传递文本值,而不是对象名。请记住,数据库必须能够仅从参数化字符串(没有实际的参数值)准备查询计划,这将取消使用元数据作为参数的资格。
您需要字符串串联:
请注意,如果变量来自程序外部,则使用这种构造会将代码暴露给sql注入。在执行查询之前,您需要手动验证参数的值(例如,通过对照允许值的固定列表进行检查,或者通过查询数据库的信息架构来确保表确实存在)。
t0ybt7op2#
如果只写以下内容,查询是否有效:
?