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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top