web-dev-qa-db-fra.com

Instruction de mise à jour MYSQL Python

J'essaie d'obtenir cette instruction de mise à jour Python MYSQL correcte (avec des variables):

cursor.execute ("UPDATE tblTableName SET Year=%s" % Year ", Month=%s" % Month ", Day=%s" % Day ", Hour=%s" % Hour ", Minute=%s" Minute "WHERE Server=%s " % ServerID)   

Des idées où je vais mal?

35
Adam Chetnik

Vous avez la syntaxe erronée:

cursor.execute ("""
   UPDATE tblTableName
   SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
   WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))

Pour plus, lisez la documentation .

48
Paolo Bergantino

Voici la bonne façon:

import MySQLdb

if __== '__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. N'oubliez pas connect.commit(), ou cela ne fonctionnera pas

16
Little Roys

Aucun d'entre eux n'a travaillé pour moi pour une raison quelconque.

J'ai compris que pour une raison quelconque, python ne lisait pas% s. Donc, utilisez (?) Au lieu de% S dans votre code SQL.

Et finalement cela a fonctionné pour moi.

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()
3
SVK

@Esteban Küber a absolument raison.

Peut-être un indice supplémentaire pour les débutants sanglants comme moi . Si vous spécifiez les variables avec% s , vous devez suivre ce principe pour CHAQUE valeur d'entrée , ce qui signifie pour SET- variables ainsi que pour les variables WHERE.

Sinon, vous devrez faire face à un message de fin tel que 'Vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de '% s WHERE'

0
M. Straube