2012-03-24 72 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))