mysql参数python表名问题

hc2pp10m  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(261)

我对使用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而不是?。在“成分”上使用其他类型的单引号而不是“成分”也不会给出结果。
这怎么行?

ahy6op9u

ahy6op9u1#

不能将表名作为参数传递给查询。参数化机制用于传递文本值,而不是对象名。请记住,数据库必须能够仅从参数化字符串(没有实际的参数值)准备查询计划,这将取消使用元数据作为参数的资格。
您需要字符串串联:

cursor.execute("select * from " + yourvar);

请注意,如果变量来自程序外部,则使用这种构造会将代码暴露给sql注入。在执行查询之前,您需要手动验证参数的值(例如,通过对照允许值的固定列表进行检查,或者通过查询数据库的信息架构来确保表确实存在)。

t0ybt7op

t0ybt7op2#

如果只写以下内容,查询是否有效:

cursor.execute("SELECT * FROM ingredient")

?

相关问题