使用python将列添加到表中的MySQL语法错误

时间:2010-10-27 17:45:06

标签: python mysql syntax-error

我的代码是:

for key in keys:
    cursor.execute("""
                    ALTER TABLE segment_table ADD %s VARCHAR(40)
                    """, key)

我收到错误,告诉我语法错误。当我用实际字符串替换%s时,语法错误消失了。

for key in keys:
    cursor.execute("""
                    ALTER TABLE segment_table ADD myColumn VARCHAR(40)
                    """)

感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

这里有一些混乱,原因有几个:

(1)mySQL使用%作为参数标记 - 很容易与Python的%

中的string % (data1, data2, etc)混淆

(2)有些人似乎不知道只有在SQL语法中可以使用表达式的情况下才能使用参数标记 - 这不包括表名,列名,函数名,关键字等等

(3)code-golf onelinerism

必需的SQL:ALTER TABLE segment_table ADD myColumn VARCHAR(40)

使用参数不起作用:

key = "myColumn"
sql = "ALTER TABLE segment_table ADD %s VARCHAR(40)" # col name not OK as parm
cursor.execute(sql, (key, ))

您需要构建一个可接受的SQL语句,例如使用Python字符串格式:

key = "myColumn"
sql = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % key
cursor.execute(sql)

答案 1 :(得分:3)

喂食前不应该更换吗?

query = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % (key)
cursor.execute( query )

答案 2 :(得分:2)

当cursor.execute()替换查询字符串中的%s时,它会向所提供的参数值添加'',所以当你这样做时

key = 'abc'
cursor.execute("""
                ALTER TABLE segment_table ADD %s VARCHAR(40)
                """, key)

执行的查询是

ALTER TABLE segment_table ADD 'abc' VARCHAR(40)

哪个mysql会抛出一个语法错误coz列名,表名可以在``但不是''

所以这将起作用

query = "ALTER TABLE segment_table ADD %s VARCHAR(40)" % (key)