MySQL 使用参数替换给出列名时出现语法错误

MySQL syntax error when giving column name with parameter substitution

所以,我试图在 python 中创建一个 sql 语句,将具有特定名称的列添加到 table,但我收到了您在标题。

我目前正在使用此代码。

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 "bind variables"(也称为参数替换)作为列名。 You Can't Do That™,您必须直接在 SQL 语句中指定列名称(和 table 名称)。

使用正常的字符串插值来构造您的语句。尝试这样的事情:

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")

显然,您可以在某种循环中执行此操作。

(注意:向具有很多行的 table 添加列可能很耗时。而且,添加列以绕过 UNIQUE 索引限制是设计 table 的一种非常奇怪的方式。相反,也许,使用没有 UNIQUE 索引的列。)

如果您的列名值来自最终用户,您必须在使用它们之前验证它们。否则,cybercreeps。