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

我在云中有一个现有的表,我想制作它的副本。我通过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.com

conn = 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))


哔哔one
浏览 180回答 1
1回答

慕容708150

参数引用用于引用值。引用表名不起作用,因为在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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python