0

因此,我试图在 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 。

4

1 回答 1

0

您正在尝试对列名使用 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")

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

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

如果您的列名值来自最终用户,则必须在使用它们之前对其进行验证。否则,网络蠕变。

XKCD 约翰尼掉落表

于 2019-11-30T15:08:32.747 回答