2009-08-20 31 views
30

que estoy tratando de conseguir este Python MySQL instrucción de actualización correcta (con variables):Python MySQL instrucción de actualización

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

Cualquier idea dónde voy mal?

Respuesta

61

Se should be:

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

Usted puede también hacerlo con la manipulación básica de cuerdas,

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

pero this way is discouraged because it leaves you open for SQL Injection. Como es tan fácil (y similar) hacerlo forma correctatm. Hazlo correctamente

Lo único que debe tener cuidado, es que algunos servidores de bases de datos no siguen la misma convención para el reemplazo de cadenas (se le viene a la mente SQLite).

+5

Paolo's answer is better. http://stackoverflow.com/questions/1307378/python-mysql-update-statement/1307413#1307413 – voyager

+0

Pero este funcionará con cada back-end. Esta versión no hace ninguna validación en la entrada, mientras que la forma de Paolo se asegurará de escapar el contenido de las variables. – voyager

+5

No * hágalo de esta manera. Te dejas abierto a los ataques de inyección de SQL. Paulo tiene la respuesta correcta, ya que asegura que los valores se escapen adecuadamente antes de pasarlos a la base de datos. –

42

Usted tiene la sintaxis todo mal:

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

Para más, read the documentation.

+3

+1 fuiste más rápido que yo :) –

+0

esta debería ser la respuesta aceptada. –

10

Ésta es la manera correcta:

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. No se olvide de connect.commit(), o no funcionará

+0

funciona sin compromiso – emir

+0

no funciona sin compromiso, utilizo Python 3.5 – Belter

3

Ninguno de ellos funcionó para mí por alguna razón.

Me di cuenta de que, por alguna razón, python no lee% s. Entonces use (?) En lugar de% S en su Código SQL.

Y finalmente esto funcionó para mí.

cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4")) 
    cursor.commit() 
Cuestiones relacionadas