我的代码是:
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)
""")
感谢任何帮助。
答案 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)