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 .
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).