Richtige Umgang mit Ausnahmen bei der Arbeit mit Datenbank

Wenn ich der Ausführung einer einfachen Abfrage (ich bin mit tornado.Datenbank Modul) ich handle Ausnahmen, wie diese:

try:
    self.application.db.execute('DELETE FROM table_one WHERE a = 1')
except Exception, e:
    logging.warning('DB exception: %s' % e)
    self.set_status(500)
    return

Wenn ich will, um eine Transaktion durchführen, obwohl, es wäre klug, um das rollback im Falle einer Ausnahme:

try:
    self.application.db.execute('START TRANSACTION')
    self.application.db.execute('DELETE FROM table_one WHERE a = 1')
    self.application.db.execute('DELETE FROM table_two WHERE b = 2')
    self.application.db.execute('COMMIT')
except Exception, e:
    logging.warning('DB exception: %s' % e)
    self.set_status(500)
    self.application.db.execute('ROLLBACK')
    return

Aber was ist, wenn rollback zu einer Ausnahme führen (z.B. wenn die Verbindung fehlschlägt)? Brauche ich um eine geschachtelte try-except-block in der außer-block?

  • So starten Sie mit, nicht fangen die Allgemeine Exception. Stattdessen versuchen Sie zu fangen, was auch immer bestimmten-Fehler, den Sie bereit sind zu handhaben. Für rollback, wenn die Verbindung verloren geht (keine normalen) Datenbank-rollback automatisch.
  • tornado wirft Allgemeinen Exception. Ja, es wird, aber Standard - wait_timeout für MySQL 28800 Sekunden, so dass andere Transaktionen auf diese Tabellen wären blockiert für die Dauer der Zeit, so brauche ich, um rollback explizit.
InformationsquelleAutor bazzilic | 2012-10-05
Schreibe einen Kommentar