簡體   English   中英

使用參數替換提供列名時出現 MySQL 語法錯誤

[英]MySQL syntax error when giving column name with parameter substitution

所以,我試圖在 python 中創建一個 sql 語句,將具有特定名稱的列添加到表中,但我收到了您在標題中看到的錯誤。

我目前正在使用此代碼。

columnname = 'note'
cur.execute("ALTER TABLE my_table_name ADD COLUMN %s MEDIUMTEXT", (columnname,))

這應該在 my_table_name 中創建一個名為 note 的列,但它給了我這個錯誤: MySQLdb._exceptions.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 ''note' MEDIUMTEXT' at line 1")

希望有人能指出我做錯了什么? 謝謝。

編輯:我知道我應該使用普通的字符串插值。 但是我想繼續添加列,例如 column1 然后 column2 然后 column3 如果其他列已經在存儲數據。

您正在嘗試對列名使用 SQL“綁定變量”,也稱為參數替換。 You Can't Do That™,您必須直接在 SQL 語句中指定列名(和表名)。

使用普通字符串插值來構建您的語句。 嘗試這樣的事情:

columnname = 'note'
cur.execute(f"ALTER TABLE my_table_name ADD COLUMN {columname} MEDIUMTEXT")

或者,如果您使用的是過時的 Python 2,請使用以下命令:

columnname = 'note'
cur.execute("ALTER TABLE my_table_name ADD COLUMN " + columname + " MEDIUMTEXT")

顯然,您可以在某種循環中執行此操作。

(小心:向具有多行的表添加列可能很耗時。而且,添加列來繞過 UNIQUE 索引限制是設計表的一種非常奇怪的方式。相反,也許可以使用沒有 UNIQUE 索引的列。)

如果您的 columname 值來自最終用戶,則您必須在使用它們之前對其進行驗證。 否則,網絡蠕變。

XKCD 約翰尼掉落表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM