编程错误1064使用Python中的MySQL从现有表中选择创建表

编程错误1064使用Python中的MySQL从现有表中选择创建表,python,mysql,pymysql,Python,Mysql,Pymysql,我在云中有一个现有的表,我想复制它。我通过pymysql连接到我的数据库,从新用户提供的输入中提取用户名,我想创建一个新表,该表将由用户名调用,并且该表将是原始表的副本。运行下面的代码时,出现以下错误: pymysql.err.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“username”附近使用的正确语法,如SELECT*FROM original_table”) 参数引用用于引用值。引用表名不起作用,因为

我在云中有一个现有的表,我想复制它。我通过pymysql连接到我的数据库,从新用户提供的输入中提取用户名,我想创建一个新表,该表将由用户名调用,并且该表将是原始表的副本。运行下面的代码时,出现以下错误:

pymysql.err.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“username”附近使用的正确语法,如SELECT*FROM original_table”)


参数引用用于引用值。引用表名不起作用,因为在MySQL中,引用表名的方法是使用倒勾(`),而不是引号

MariaDB [test]>  CREATE TABLE 'username' AS SELECT * FROM my_table;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''username' AS SELECT * FROM my_table' at line 1
因此,您需要使用字符串格式来创建SQL语句(您可以使用反勾号来防止SQL注入*):


*我不是SQL注入方面的专家,所以如果
table\u name
源于您的应用程序之外,请进行一些研究。

它在@snakecharmerb工作!我不知道,非常感谢!作为后续问题,新创建的表有一个不友好的名称(
'username'
),带有反勾号(很抱歉,我们在这里看不到反勾号)和单引号;你知道一种让它更吸引人的方法吗?这些引语来自哪里?您是否仍在使用当前执行(stmt,tbl)?它需要是
cur.execute(stmt%tbl)
cur.execute(stmt.format(tbl))
(或其他一些Python的无限字符串格式变体)我在使用您的代码时犯了一个错误;我用逗号将表名放在括号中,格式将名称更改为用户名,并用引号和反引号括起来。我做了适当的改变,一切都很完美。再次感谢!
MariaDB [test]>  CREATE TABLE 'username' AS SELECT * FROM my_table;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''username' AS SELECT * FROM my_table' at line 1
cur.execute(""" CREATE TABLE `%s` AS SELECT * FROM original_table """ % table_name)