Ich habe ein kleines/einfaches Python-Skript erstellt, um Daten in eine MySQL-Datenbank einzufügen. Ich habe eine Fehlerbehandlung eingebaut - hauptsächlich, um die Verbindung zu schließen und/oder hängende Verbindungen im Falle eines Fehlers zu verhindern (... aber auch einige Fehler zu ignorieren).Korrekte Ausnahmebehandlung mit Python MySQLdb-Verbindung
Ich dachte, was ich hatte (siehe unten) hatte Recht - es schien in Ordnung zu sein. Aber gelegentlich habe ich "Too many connection" -Fehler bekommen - was ich annehme, bedeutet, dass ich die Verbindung überhaupt nicht richtig schließe (oder vielleicht ist die Fehlerbehandlung nicht richtig).
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()
(Ich habe auch versucht, ohne finally:
)
Die andere (ich glaube, wichtig) ist, dass es ist, dass die MySQL-Datenbank einen Speicher-Engine InnoDB verwendet. Dies ist das erste Mal, dass ich InnoDB-Engine verwendet habe und vielleicht gibt es einige Unterschiede zu MyISAM, die hier relevant sind, die mir nicht bekannt sind (wie conn.commit()
, aber für einen Fehler) .... Das scheint die Quelle von allem zu sein meine anderen Probleme!
Vielen Dank im Voraus
Sie sollten die 'conn.close()' aus dem 'try' -Hauptteil entfernen, da sie _immer_ innerhalb des' finally'-Rumpfs aufgerufen wird. Abgesehen davon sieht es so aus, als ob Sie Ihre Verbindungen richtig freigeben. – lanzz
Danke Lanzz - Entschuldigung, ich habe einen Fehler beim Kopieren des Codes gemacht (spielte ohne 'finally:', und hatte einen 'conn.close()' im 'try' body ** und ** the' except' body). Haben Sie die Frage behoben (immer noch das gleiche Problem) – djmac