He creado un pequeño/basic script de python para insertar datos en una base de datos MySQL. He incluido algunos errores de manejo, principalmente para cerrar la conexión y/o evitar que bloquea las conexiones en el caso de un error (…pero también a ignorar algunos de los errores).

Yo pensaba que lo que tenía (ver más abajo) que era lo correcto – parecía estar funcionando bien. Pero de vez en cuando he estado recibiendo «Demasiadas conexiones» errores – que se asume significa que no soy realmente el cierre de la conexión correctamente en todos (o tal vez el manejo de errores no es la correcta).

conn=MySQLdb.connect(host=####, user=####, passwd=####, db=####)
curs=conn.cursor()
try:
    curs.execute(sql)
    conn.commit()           

except MySQLdb.Error as e:
    if e[0]!= ###:
        raise

finally: 
    curs.close()    
    conn.close()

(También probé sin finally:)

El otro (que me parece importante) el punto es que es que la base de datos MySQL utiliza un motor de almacenamiento InnoDB. Esta es la primera vez que he usado motor InnoDB y tal vez hay algunas diferencias a MyISAM que son relevantes aquí, que yo no soy consciente de que (como conn.commit(), pero por un error)…. Que parece ser la fuente de todos mis problemas!

Gracias de antemano

Debe quitar el conn.close() de la try cuerpo, como siempre se llama dentro de la finally cuerpo. Aparte de eso, parece que eres la liberación de sus conexiones correctamente.
Gracias Lanzz – lo siento, he cometido un error de copiar el código (estaba jugando sin finally:, y había un conn.close() en el try cuerpo y el except cuerpo). Han arreglado la cuestión (todavía tengo el mismo problema, de cualquier manera)

OriginalEl autor djmac | 2014-02-12

1 Comentario

  1. 4

    Creo que el problema era que no estaba invocando conn.rollback() en el except cláusula (y, en consecuencia, la conexión no se cierre correctamente). Una línea (ver más abajo) parecía para solucionar el problema (no puedo estar muy seguro de si era esta la cuestión de que si alguien puede confirmar que sería genial).

    conn=MySQLdb.connect(host=####, user=####, passwd=####, db=####)
    curs=conn.cursor()
    try:
        curs.execute(sql)
        conn.commit()           
    
    except MySQLdb.Error as e:
        conn.rollback()              #rollback transaction here
        if e[0]!= ###:
            raise
    
    finally: 
        curs.close()    
        conn.close()

    OriginalEl autor djmac

Dejar respuesta

Please enter your comment!
Please enter your name here