executemany python mysql mysql-python sql-parametrized-query

python mysql executemany



DeclaraciĆ³n de actualizaciĆ³n Python MYSQL (5)

Estoy tratando de obtener esta declaración de actualización de Python MYSQL correcta (con 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)

¿Alguna idea de dónde me estoy equivocando?


@Esteban Küber tiene toda la razón.

Tal vez una sugerencia adicional para principiantes sangrientos como yo. Si especifica las variables con% s , debe seguir este principio para CADA valor de entrada , lo que significa para las variables SET y las variables WHERE.

De lo contrario, deberá enfrentar un mensaje de terminación como ''Usted tiene un error en su sintaxis de SQL; verifique el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de ''% s WHERE''


Esta es la forma 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()

PD: no olvide connect.commit() , o no funcionará


Ninguno de los dos 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")) connect.commit()


Usted tiene la sintaxis 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 información, lea la documentación .


Debería ser :

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

También puedes hacerlo con la manipulación básica de cadenas,

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 de esta forma no se recomienda porque lo deja abierto para la Inyección de SQL . Como es tan fácil (y similar) hacerlo de la manera correcta tm . Hazlo correctamente

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