La base de datos no se actualiza automáticamente con MySQL y Python

Tengo algunos problemas para actualizar una fila en una base de datos MySQL. Aquí está el código que estoy tratando de ejecutar:

import MySQLdb conn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname") cursor=conn.cursor() cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100") cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100") results = cursor.fetchall() for row in results: print row[0] print "Number of rows updated: %d" % cursor.rowcount cursor.close() conn.close() 

La salida que obtengo cuando ejecuto este progtwig es:

4
Número de filas actualizadas: 1

Parece que está funcionando, pero si consulta la base de datos desde la interfaz de línea de comandos (CLI) de MySQL, encuentro que no se actualizó en absoluto. Sin embargo, si desde la CLI ingreso UPDATE compinfo SET Co_num=4 WHERE ID=100; la base de datos se actualiza como se esperaba.

Cual es mi problema Estoy ejecutando Python 2.5.2 con MySQL 5.1.30 en una caja de Windows.

No estoy seguro, pero supongo que está utilizando una tabla INNODB y no ha realizado ningún compromiso. Creo que MySQLdb habilita las transacciones automáticamente.

Llame a conn.commit() antes de llamar a close .

De las preguntas frecuentes: a partir de la versión 1.2.0, MySQLdb desactiva la confirmación automática de forma predeterminada

MySQLdb se ha desactivado automáticamente de forma predeterminada, lo que puede ser confuso al principio. Su conexión existe en su propia transacción y no podrá ver los cambios que realice de otras conexiones hasta que confirme esa transacción.

Puede hacer conn.commit() después de la statement de actualización, como lo han indicado otros, o deshabilitar esta funcionalidad al configurar conn.autocommit(True) justo después de crear el objeto de conexión.

Debe confirmar los cambios manualmente o activar la confirmación automática.

La razón por la que SELECT devuelve los datos modificados (pero no persistentes) es porque la conexión todavía está en la misma transacción.

Descubrí que el conector de Python se desactiva automáticamente y no parece haber ninguna forma de cambiar este comportamiento. Por supuesto, puede volver a activarlo, pero luego, al mirar los registros de consultas, hace dos consultas sin sentido después de la conexión para desactivar la confirmación automática y luego volver a activarla.