Corriger la gestion des exceptions avec python MySQLdb connexion

J'ai créé une petite base de script python pour insérer des données dans une base de données MySQL. J'ai inclus une gestion d'erreur - principalement pour fermer la connexion et/ou de prévenir la pendaison de connexions dans le cas d'une erreur (...mais aussi d'ignorer certaines erreurs).

J'ai pensé que ce que j'avais (voir ci-dessous) était - il semble d'accord. Mais de temps en temps, j'ai été faire "Trop grand nombre de connexion" erreurs - qui je suppose signifie que je ne suis en fait pas de fermer la connexion correctement à toutes (ou peut-être la gestion d'erreur n'est pas droit).

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

(J'ai aussi essayé sans finally:)

Les autres (je pense important) le point est que c'est que la base de données MySQL utilise le moteur de stockage InnoDB. C'est la première fois que j'ai utilisé le moteur InnoDB et peut-être il y a quelques différences à MyISAM qui sont pertinentes en l'espèce, que je ne suis pas au courant (comme conn.commit(), mais pour une erreur).... Qui semble être la source de tous mes problèmes!

Merci d'avance

Vous devez supprimer les conn.close() de la try corps, comme il toujours être appelé au sein de la finally corps. Autre que cela, il semble que vous sortez de vos connexions correctement.
Grâce Lanzz - désolé, j'ai fait une erreur de copier le code (a joué sans finally:, et a eu un conn.close() dans le try corps et la except corps). Ont résolu la question (toujours le même problème, de toute façon)

OriginalL'auteur djmac | 2014-02-12