Python MYSQL Update-Anweisung
-
19-09-2019 - |
Frage
Ich versuche, diesen Python MYSQL Update-Anweisung zu erhalten richtig (mit Variablen):
cursor.execute ("UPDATE tblTableName SET Year=%s" % Year ", Month=%s" % Month ", Day=%s" % Day ", Hour=%s" % Hour ", Minute=%s" Minute "WHERE Server=%s " % ServerID)
Irgendwelche Ideen, wo ich falsch gehe?
Lösung
Es sollte werden:
cursor.execute ("""
UPDATE tblTableName
SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))
Sie können auch tun es mit einfachen String-Manipulation,
cursor.execute ("UPDATE tblTableName SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s WHERE Server='%s' " % (Year, Month, Day, Hour, Minute, ServerID))
und diese Art und Weise wird abgeraten, weil es Sie für SQL-Injection offen lässt . Da es so einfach (und ähnliche) die richtig TM zu tun. Tun Sie es richtig.
Das einzige, was man vorsichtig sein sollte, ist, dass einige Datenbank-Backends nicht die gleiche Konvention für string Ersatz folgen (SQLite den Sinn kommt).
Andere Tipps
Sie haben die Syntax alles falsch:
cursor.execute ("""
UPDATE tblTableName
SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))
Für mehr die Dokumentation .
Hier ist der richtige Weg:
import MySQLdb
if __name__ == '__main__':
connect = MySQLdb.connect(host="localhost", port=3306,
user="xxx", passwd="xxx", db='xxx', charset='utf8')
cursor = connect.cursor()
cursor.execute("""
UPDATE tblTableName
SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))
connect.commit()
connect.close()
P. S. Vergessen Sie nicht, connect.commit()
, oder es wird nicht funktionieren
Keiner von ihnen für mich aus irgendeinem Grunde funktioniert.
ich es herausgefunden, dass aus irgendeinem Grund Python% s nicht liest. So verwenden (?) Anstelle von% S in Sie SQL-Code.
Und schließlich das funktionierte für mich.
cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
connect.commit()
@Esteban Küber ist absolut richtig.
Vielleicht ein weiterer Hinweis für blutige Anfänger wie mich. Wenn Sie speciify die Variablen mit% s , müssen Sie folgen diesem Prinzip für jeden Eingang Wert , die für die SET-Variablen sowie für die WHERE-Variablen bedeuten.
Andernfalls werden Sie eine Beendigungsnachricht zu kämpfen haben wie 'Sie haben einen Fehler in der SQL-Syntax; Sie in die Bedienungsanleitung für die richtige Syntax verwendet in der Nähe von '% s WHERE
Ihre MySQL-Server-Version entspricht