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

Python 使用参数替换提供列名时出现MySQL语法错误,python,mysql,sqlbindparameter,Python,Mysql,Sqlbindparameter,因此,我试图在python中创建一个sql语句,将具有特定名称的列添加到表中,但我得到了标题中所示的错误 我现在正在使用这个代码 columnname = 'note' cur.execute("ALTER TABLE my_table_name ADD COLUMN %s MEDIUMTEXT", (columnname,)) 这应该会在我的表名中创建一个名为note的列,但它给了我一个错误:MySQLdb.\u exceptions.ProgrammingError:(1064,“您的SQ

因此,我试图在python中创建一个sql语句,将具有特定名称的列添加到表中,但我得到了标题中所示的错误

我现在正在使用这个代码

columnname = 'note'
cur.execute("ALTER TABLE my_table_name ADD COLUMN %s MEDIUMTEXT", (columnname,))
这应该会在我的表名中创建一个名为note的列,但它给了我一个错误:
MySQLdb.\u exceptions.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以获取在第1行“note'MEDIUMTEXT”附近使用的正确语法”)

希望有人能指出我做错了什么?谢谢

编辑:我知道我应该使用普通字符串插值。但如果其他列已经在存储数据,我希望继续添加列,如column1、column2、column3。

您正在尝试使用SQL“绑定变量”(也称为参数替换)作为列名。你不能那样做™, 必须在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")
显然,你可以在某种循环中这样做

(小心:向具有多行的表中添加列可能会非常耗时。而且,添加列以绕过唯一索引限制是设计表的一种非常奇怪的方式。相反,可能使用没有唯一索引的列。)

如果您的列名值来自最终用户,则必须在使用它们之前验证它们。否则,网络就会蔓延


不能使用参数替换列名。在本例中,您应该只使用普通字符串插值。我对@O.Jones-->的回答相同,但如果我尝试添加连续的表呢?比如:我在列1上存储了一些(唯一的)数据,然后当我再次尝试插入数据时,如果列1已经存储了一些数据,我想创建列2并重复这个过程,所以应该是columnname+=1,在它之后添加column1 column2等等,如前所述。使用普通字符串插值,但从不接受来自外部源的列名。不起作用。使用字符串插值时出现相同错误。我不知道该怎么办了。嘿,还是不工作,我用了这个:columnname='note'cur.execute(f“ALTER TABLE my_TABLE_name ADD COLUMN{columnname}MEDIUMTEXT”),但它不工作。错误:MySQLdb._exceptions.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行的“{columname}MEDIUMTEXT”附近使用的正确语法”)