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
Flask mit SQL-Anbindung, Problem mit Update-Befehl
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;
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,))
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.
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.