Ich bin neu in mySQL mit Python und ich bekomme den allgemeinen 1054 Fehler, wenn ich versuche, eine vorbereitete SQL INSERT-Anweisung auszuführen mit Python-freundlichen Platzhaltern ('% s')SQL Fehler 1054, "Unbekannte Spalte 'xxxxx' in 'Feldliste'" in Python mit Platzhaltern
Ich verstehe die normale Lösung besteht darin, Anführungszeichen anstelle von Back-Ticks hinzuzufügen, oder füge sie hinzu, wenn sie für die eingefügten Werte fehlen, jedoch habe ich eine Überprüfung ausgeführt Die Cols und Vals Tupel und ich kann sehen, dass sie in einfachen Anführungszeichen enthalten sind, also bin ich etwas verwirrt, warum dieser Fehler auftritt.
Unten finden Sie einen Ausschnitt aus meinem Code: (BTW 'Cols' und 'vals' Tupel von Strings (mit Schwerpunkt auf Strings :))
ersten füge ich die Spaltennamen:
for item in cols:
try:
# First add columns if not already present
query = "ALTER TABLE Parameters ADD COLUMN %s VARCHAR(200)" % (str(item))
cursor.execute(query)
connection.commit()
except:
pass
Dann versuche ich das Hinzufügen der Werte:
sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(', '.join(cols), ', '.join(['%s'] * len(cols)));
try:
cursor.execute(sql, vals)
except Exception as e:
print(e)
connection.close()
Manchmal gibt es kein Problem, aber sonst bekomme ich diesen Fehler:
(1054, "Unknown column 'ColumnName' in 'field list'")
Ist meine Python-Anweisung vollständig falsch, und sind Platzhalter nicht die beste Praxis? Ich verwende Platzhalter, da meine Listen sehr groß sind.
Hier ist eine verdummte Version der SQL-Anweisung drucken.
INSERT INTO Parameters (TestID, Dev_Type, Version, MAC, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DayActNxtDateTime, XXXX) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
Und Fehler:
(1054, "Unknown column 'DayActNxtDateTime' in 'field list'")
Drucken Sie die SQL-Anweisung, nachdem Sie die Variablensubstitution durchgeführt haben. Wenn die Antwort nicht offensichtlich ist, lege das Ergebnis in die Frage. –
Sie können keine Platzhalter für Feldnamen verwenden. –
Hallo @Gordon Linoff, ich kann die Aussage nicht wirklich hinter sich lassen, da es sensible Daten sind, aber ich habe das schon überprüft. Ich füge ein enges Beispiel der Aussage ein, die ich nach dem Drucken habe. – MikG