首页 > 解决方案 > MYSQL参数python问题与表名

问题描述

我是使用 python API 向 mysql 发送查询的新手。

我的问题很容易重现。我有一个名为“ingredient”的表,我想使用参数从 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 而不是 ? 的问题相同。在 'ingredient' 上使用其他类型的单引号而不是 'ingredient' 也不会产生结果。

这应该如何在这里工作?

标签: pythonsqlparameters

解决方案


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

您需要字符串连接:

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

请注意,如果变量来自您的程序外部,则使用此类结构会将您的代码暴露给 SQL 注入。您需要在执行查询之前手动验证参数的值(例如,根据允许值的固定列表检查它,或者通过查询数据库的信息模式以确保表确实存在)。


推荐阅读