una insertar datos conectar con como acceso abrir python mysql mysql-python

insertar - modulo python mysql



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

Tengo problemas para actualizar una fila en una base de datos MySQL. Aquí está el código que intento 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()

El resultado que obtengo cuando ejecuto este programa es:

4
Número de filas actualizadas: 1

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

¿Cuál es mi problema? Estoy ejecutando Python 2.5.2 con MySQL 5.1.30 en un cuadro de Windows.


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

El motivo por el cual SELECT devuelve los datos modificados (pero no persistentes) es porque la conexión aún está en la misma transacción.


Descubrí que el conector de Python desactiva automáticamente el autocommit y no parece haber ninguna forma de cambiar este comportamiento. Por supuesto, puede volver a encenderlo, pero luego, al mirar los registros de consulta, hace estúpidamente dos consultas sin sentido después de conectarse para desactivar el autocommit y volver a encenderlo.


MySQLdb se ha apagado automáticamente por defecto, lo que puede ser confuso al principio. Su conexión existe en su propia transacción y no podrá ver los cambios que realice desde otras conexiones hasta que realice dicha transacción.

Puede hacer conn.commit() después de la declaración de actualización como otros señalaron, o deshabilitar esta funcionalidad por completo configurando conn.autocommit(True) justo después de crear el objeto de conexión.