cursor.query( 'select * from %s;', ('thistable',) ) 抛出语法错误 1064:...在“'thistable'”附近

cursor.query( 'select * from %s;', ('thistable',) ) throws syntax error 1064: ...near ' 'thistable' ' at

MySQLdb: cursor.query( 'select * from %s;', ('thistable',) )

最终应该是:'select * from thistable'

实际上最终为:"select * from 'thistable' "

数据库自然会抛出语法错误:...在...

附近的“'thistable'”

它的行为就好像数据转换器将字符串的引号作为字符串的一部分包括在内,即字符串是“'thistable'”而不是'thistable'。对此的任何和所有帮助都深表感谢。我在查询中注意到的一件事是脚本的字符集是 utf8,而数据库服务器和数据库是 latin1。这可能是我的问题吗?

OS: os X 塞拉

python: 3.6

MySQL: 5.3.6

mysql-连接器-c:6.1.11

构建动态 SQL 和构建参数化查询之间存在差异。

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

如果您需要动态添加数据库对象(tables、列、过程名称等),您可能需要先构建带有占位符的查询字符串(如 %s) 实参需要传入

在这种情况下,ypercubeᵀᴹ 的建议是直接使用字符串 'select * from thistable'。如果您需要 运行 针对多个 table 的相同查询,请循环遍历 table 的列表,构建如下字符串:

queryString = 'SELECT * FROM ' + currTable