2012-03-24 8 views
0

Ich versuche, den folgenden Befehl auszuführen, Einstellung "speichern" = "Ergebnis", für die Zeile, wo die Code-Spalte gleich "Code" ist.Python Mysql Update Ausführen Befehl

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

Ich halte die folgenden Fehler zu erhalten, obwohl:

_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") 

Wo die Variablen aus dem Befehl waren:

store=1087 
result=1 
code=Madness16 

Dies ist mein erstes Mal wirklich mysql verwenden, so dass ich bin neu dazu. Ich bin jetzt seit ungefähr 2 Stunden in dieser Leitung und kann nicht herausfinden, was ich falsch mache. Ich habe versucht, den folgenden Befehl in mysql, und es lief richtig:

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

Mehr Code wie gewünscht:

# 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

Es ist wie Sie ein Zitat Problem haben, wenn Sie den Fehler (= "Madness16") betrachten, ist es wirklich das? –

+0

Warum verwenden Sie Ganzzahl für Feldnamen? 1087 sollte kein Feldname sein, sondern eine ID. Das Problem wird wahrscheinlich durch Mischen von Strings und Ints verursacht, aber man kann nicht sicher sein, es sei denn, wir sehen mehr Code. – Doa

+1

@ JeremyD Das Zitat-Problem war nur in diesem Beitrag, der tatsächliche Fehler zeigte zwei einfache Anführungszeichen anstelle eines doppelten Zitats. Ich habe den Beitrag aktualisiert, damit er korrekt formatiert ist. – xur17

Antwort

2

Sie wollen stattdessen, so etwas versuchen, (vorausgesetzt, dies zu SQL nicht anfällig ist Injection-Angriffe - die Daten Bedeutung vertrauenswürdig ist und nicht vom Benutzer zur Verfügung gestellt)

... 
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

Dies wird nicht anfällig für SQL-Injection-Angriffe. Es ist ein lokales Skript von mir laufen, um eine Website zu kratzen Ich gebe dies einen Versuch, jetzt melde ich mich zurück – xur17

+0

Danke, dies löste das Problem für mich! Aus Neugier, war dieses Problem aufgetreten, weil die Spalten mit ganzen Zahlen betitelt sind ? Ist es ein Problem für mich, dies zu tun, oder einfach nicht üblich für ganze Zahlen? für die Spaltennamen verwendet werden? – xur17

0

statt " mit ' Versuchen:

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