我在云中有一個現有的表,我想制作它的副本。我通過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 = [email protected] = 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
提交
取消