我在云中有一个现有的表,我想制作它的副本。我通过pymysql连接到我的数据库,从新用户提供的输入中提取用户名,并且我想创建一个由用户名调用的新表,该表将是原始表的副本。当我运行下面的代码时,我有以下错误:pymysql.err.ProgrammingError: (1064, "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 ''username' AS SELECT * FROM original_table' at line 1")uname = blabla@bla.comconn = pymysql.connect( host="db.host", port=int(3306), user=user, passwd=password, db=db, charset='utf8mb4' ) cur = conn.cursor() table_name = uname.replace('@', '_').replace('.', '_') print('TABLE NAME:', table_name) cur.execute(""" CREATE TABLE %s AS SELECT * FROM original_table """, (table_name))
1 回答

慕容708150
TA贡献1831条经验 获得超4个赞
参数引用用于引用值。引用表名不起作用,因为在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 注入*):
cur.execute(""" CREATE TABLE `%s` AS SELECT * FROM original_table """ % table_name)
*我不是SQL注入方面的专家,所以如果起源于你的应用程序之外,请做一些研究。table_name
添加回答
举报
0/150
提交
取消