2012-03-24 71 views
0

我试图执行以下命令,设置“store”=“result”,代码列等于“代码”的行。Python的Mysql更新执行命令

cursor.execute("""UPDATE pjStores SET %s=%s WHERE code=%s""", (store, result, code)) 

我不断收到以下错误,但:

_mysql_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 ''1087'=1 WHERE code='Madness16'' at line 1") 

如果该命令的变量是:

store=1087 
result=1 
code=Madness16 

这是我第一次真正使用MySQL,所以我新对此。我一直在这条线上停留了2个小时,并且无法弄清楚我做错了什么。我试着在MySQL下面的命令,并将其正确运行:按要求

UPDATE pjStores SET `1087`=1 WHERE code='Madness16' 

更多代码:

# Step through stores 
cursor.execute("SHOW COLUMNS FROM pjStores") 
stores = cursor.fetchall() 
cursor.execute("SELECT code FROM pjStores") 
codes = cursor.fetchall() 

for store in stores[1:]: # Hack to skip first entry 
    pj.setStore(store[0]) 
    for code in codes: 
     result = pj.checkCode(code[0]) 
     cursor.execute ("""UPDATE pjStores SET %d=%s WHERE code=%s""", (store[0],  result, code[0])) 
+0

这就像你有一个报价问题,如果你看看错误(='疯狂16“)它是真的吗? – 2012-03-24 04:13:49

+0

为什么你使用整数字段名? 1087不应该是字段名称,而应该是ID。 这个问题可能是由字符串和整数混合造成的,但除非我们看到更多的代码,否则不能确定。 – Doa 2012-03-24 04:18:54

+1

@JeremyD引号问题就在这篇文章中,实际的错误显示了两个单引号而不是双引号。我更新了文章,以便格式正确。 – xur17 2012-03-24 04:22:12

回答

2

你可能想尝试这样的事情,而不是,(假设这是不容易的sql注入攻击 - 这意味着该数据是可信的,而不是用户提供)

... 
for code in code: 
    result = pj.checkCode(code[0]) 
    query = """UPDATE pjStores SET `%s` = %%s WHERE `code` = %%s""" % store[0] 
    cursor.execute(query, (result, code[0])) 
+0

这不会容易出现sql注入攻击,它是一个本地脚本 我现在就试试这个,我会回报 – xur17 2012-03-24 04:36:57

+0

谢谢,这个解决了我的问题!出于好奇,出现了这个问题,因为列的标题是整数?这对我来说是一个问题,或者对于整数来说是不常见的用于列名? – xur17 2012-03-24 05:00:44

0

尝试使用'代替"

cursor.execute('''UPDATE pjStores SET %s=%s WHERE code=%s''', (store, result, code))