Seite 1 von 1

Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 11:02
von dasas1112
Hallo bin ganz neu hier im Forum und noch relativ unerfahren mit der ganzen Thematik.
Ich hänge momentan an einem simplem SQL Update Befehl fest.
Nur zur Situation:
Ich bekomme 3 Werte aus einem HTML Formular. (1 Wert: Zeilenname, 2 Wert: Spaltenname, 3 Wert: Neuer Wert im Feld).
Habe nun versucht alle 3 Werte in den Update Befehl einzubauen, jedoch muss ich hierfür %s = %s im Update Befehl schreiben dies nimmt SQL aber nicht an.
Ein Kumpel meinte ich muss mit ner String Formatierung arbeiten aber wo und wie habe ich nicht kapiert.
Ich hoffe ihr könnt mir weiter helfen.

Code:
cursor.execute('update Autos set %s=%s where ID=%s ' , (eing_datum, eing_neuer_wert, auto_id,))
Fehler:
1064 (42000): 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 ''Automarke'='ss' where ID=1' at line 1

MFG
dasas1112

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 11:16
von __deets__
Du kannst in SQL nicht dynamisch eine Spalte per Parameter angeben. Das ist nur fuer Werte moeglich. Du musst das SQL also abhaengig von der Spalte aendern. Gleichzeitig musst du bei einem solchen Design hoellisch aufpassen, dass die Eingabe aus dem HTML-Formular nicht ungeprueft uebernommen wird, denn sonst wird dir per SQL-Injection beliebig in der DB rumgefuhrwerkt.

Ein Weg waere zB die SQL-Statements per dictionary vorzuhalten, so das nur erlaubte Werte gueltiges SQL liefern;

Code: Alles auswählen

STATEMENTS = dict(
       reifenanzahl="UPDATE auto SET reifenanzahl=%s",
       ps="UPDATE auto SET ps=%s",
       ...)
cursor.execute(STATEMENTS[spalte], (eing_neuer_wert, auto_id,))

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 11:37
von dasas1112
Vielen Dank für die schnelle und hilfreiche Antwort.

Den Punkt mit dem ungewollten Zugriff Fremder hatte ich mir schon überlegt, jedoch keine Lösung.
Erstelle jetzt mal für alle Columns ein dictionary.
Den execute Befehl habe ich noch nicht ganz verstanden, hier bräuchte ich nochmal Hilfe.

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 11:52
von __deets__
Was heisst nicht verstanden? Alles was da passiert ist, dass der SQL String nachgeschlagen wird. Sonst ist der doch gleich.

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 12:10
von dasas1112
Sehr geil, funktioniert nun alles.
Stand so ewig auf der Leitung und es war so ne simple Lösung.

Vielen Dank

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 12:19
von dasas1112
Funktioniert nun leider nur für den ersten Spaltenname im Dictionary, bei allen weiteren kommt ne Fehlermeldung.

Re: Flask mit SQL-Anbindung, Problem mit Update-Befehl

Verfasst: Donnerstag 13. Juni 2019, 13:57
von Sirius3
Was hast Du jetzt programmiert? Zeig den Code und die komplette Fehlermeldung.