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。
所以,我试图在 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。