Mysql 5.6 cursor.query('select*from%s;',('ThistTable',)在以下位置的“”ThistTable“”附近引发语法错误1064:

Mysql 5.6 cursor.query('select*from%s;',('ThistTable',)在以下位置的“”ThistTable“”附近引发语法错误1064:,mysql-5.6,python,Mysql 5.6,Python,MySQLdb:cursor.query“从%s;中选择*,”此表' 应结束为:“从该表中选择*” 实际结果是:从“thistable”中选择* db自然抛出语法错误:…位于“”处的“”thistable“”附近 它的行为就像数据转换器将字符串的引号作为字符串的一部分,即字符串是“thistable”而不是“thistable”。我们非常感谢您在这方面提供的任何帮助。在我的任务中我注意到的一点是,脚本的字符集是utf8,而db服务器和db是latin1。这可能是我的问题吗 OS:OSX塞拉 py

MySQLdb:cursor.query“从%s;中选择*,”此表'

应结束为:“从该表中选择*”

实际结果是:从“thistable”中选择*

db自然抛出语法错误:…位于“”处的“”thistable“”附近

它的行为就像数据转换器将字符串的引号作为字符串的一部分,即字符串是“thistable”而不是“thistable”。我们非常感谢您在这方面提供的任何帮助。在我的任务中我注意到的一点是,脚本的字符集是utf8,而db服务器和db是latin1。这可能是我的问题吗

OS:OSX塞拉

python:3.6

MySQL:5.3.6


mysql-connector-c:6.1.11

构建动态SQL和构建参数化查询之间有区别

通常,参数化查询允许您插入用于比较/输入的值,但不允许插入数据库对象。因此,应用程序代码假定%s是带引号的文本,而不是数据库对象

如果需要动态地添加数据库对象表、列、过程名称等,则可能需要首先构建查询字符串,为需要传入的实际参数使用诸如%s之类的占位符

在这种情况下,可能是ᵀᴹ's建议直接使用字符串“select*fromthistable”。如果需要对多个表运行相同的查询,请在表列表中循环,生成如下字符串:

queryString = 'SELECT * FROM ' + currTable

为什么不直接使用cursor.query'select*fromthistable;'?啊哈,谢谢你,我没有意识到这一点我选择这个作为我的答案。我也对你的答案投了赞成票,因为我确信在任何相关软件的文档中都没有提到这一区别,但我没有足够的声誉来展示它。再次感谢!