2010-01-26 4 views
31

Wie behandeln Sie Fehler in SQLAlchemy? Ich bin relativ neu bei SQLAlchemy und weiß es noch nicht.Fehlerbehandlung in SQLAlchemy

Bevor ich verwendet SQLAlchemy, ich würde Dinge wie

status = db.query("INSERT INTO users ...") 
if (!status): 
    raise Error, db.error 

Aber jetzt in SQLAlchemy Ich entwickle und ich Dinge tun, wie

user = User('Boda Cydo') 
session.add(user) 
session.commit() 

kein Fehler überhaupt überprüft!

Ich mag diesen Codierungsstil überhaupt nicht ohne Fehlerüberprüfung.

Bitte beraten Sie, wie Sie Fehler in SQLAlchemy überprüfen und behandeln!

Mit freundlichen Grüßen Boda Cydo.

+0

sehen Beispiel Nehmen Sie an sqlalchemy.org http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueConstraintExceptionHandling –

Antwort

54

Ihr Beispiel sagt:

status = db.query("INSERT INTO users ...") 
if (!status): 
    raise Error, db.error 

Das scheint bedeuten, dass Sie eine Ausnahme erhöhen möchten, ob es ein Fehler ist auf der Abfrage (mit raise Error, db.error). Allerdings macht sqlalchemy das schon für Sie - also

user = User('Boda Cydo') 
session.add(user) 
session.commit() 

Ist genauso. Der Check-and-Raise-Teil befindet sich bereits in SQLAlchemy. Hier

ist eine Liste der Fehler sqlalchemy selbst erheben kann, genommen von help(sqlalchemy.exc) und help(sqlalchemy.orm.exc):

  • sqlalchemy.exc:
    • ArgumentError - Wird ausgelöst, wenn ein ungültiges oder widersprüchliches Funktionsargument geliefert wird. Dieser Fehler entspricht im Allgemeinen Bauzustandsfehlern.
    • CircularDependencyError - Angehoben durch topologische Sortierungen wenn eine zirkuläre Abhängigkeit
    • CompileError erkannt wird - ausgelöst, wenn ein Fehler während der Kompilierung SQL
    • ConcurrentModificationError
    • DBAPIError auftritt - ausgelöst, wenn die Ausführung einer Datenbankoperation fehlschlägt. Wenn der Fehler bei der Ausführung einer SQL-Anweisung auftrat, sind diese Anweisung und ihre Parameter unter das Ausnahmeobjekt in den Attributen statement und params verfügbar. Das umbrochene Ausnahmeobjekt ist im Attribut orig verfügbar. Der Typ und die Eigenschaften sind DB-API-spezifisch.
    • DataError Wraps eine DB-API DataError.
    • DatabaseError - Wraps eine DB-API DatabaseError.
    • DisconnectionError - Bei einer unbearbeiteten DB-API-Verbindung wurde eine Trennung festgestellt. durch eine PoolListener ausgelöst werden, so dass der Host-Pool eine Trennung erzwingt.
    • FlushError
    • IdentifierError - ausgelöst, wenn ein Schemaname über die Zeichengrenze max ist
    • IntegrityError - Bricht eine DB-API IntegrityError.
    • InterfaceError - Wraps eine DB-API InterfaceError.
    • InternalError - Wraps eine DB-API InternalError.
    • InvalidRequestError - SQLAlchemy wurde gebeten, etwas zu tun, was es nicht tun kann. Dieser Fehler entspricht im Allgemeinen Laufzeit-Zustandsfehlern.
    • NoReferenceError - ausgelöst durch ForeignKey, um anzuzeigen, dass eine Referenz nicht aufgelöst werden kann.
    • NoReferencedColumnError - ausgelöst durch ForeignKey, wenn die genannte Column nicht gefunden werden kann.
    • NoReferencedTableError - ausgelöst durch ForeignKey, wenn die genannte Table nicht gefunden werden kann.
    • NoSuchColumnError - Eine nicht vorhandene Spalte wird von einer RowProxy angefordert.
    • NoSuchTableError - Tabelle existiert nicht oder ist für eine Verbindung nicht sichtbar.
    • NotSupportedError - Wraps eine DB-API NotSupportedError.
    • OperationalError - Wraps eine DB-API OperationalError.
    • ProgrammingError - Wraps eine DB-API ProgrammingError.
    • SADeprecationWarning - Wird einmal pro Verwendung einer veralteten API ausgegeben.
    • SAPendingDeprecationWarning - Wird einmal pro Verwendung einer veralteten API ausgegeben.
    • SAWarning - Wird zur Laufzeit ausgegeben.
    • SQLAlchemyError - Generische Fehlerklasse.
    • SQLError - Wird ausgelöst, wenn die Ausführung einer Datenbankoperation fehlschlägt.
    • TimeoutError - Wird ausgelöst, wenn ein Verbindungspool beim Herstellen einer Verbindung das Zeitlimit überschreitet.
    • UnboundExecutionError - Es wurde versucht, SQL ohne Datenbankverbindung auszuführen.
    • UnmappedColumnError
  • sqlalchemy.orm.exc:
    • ConcurrentModificationError - Reihen wurden außerhalb der Arbeitseinheit modifiziert.
    • FlushError - Während des Flush() wurde ein ungültiger Zustand festgestellt.
    • MultipleResultsFound - Ein einzelnes Datenbankergebnis wurde benötigt, es wurden jedoch mehrere gefunden.
    • NoResultFound - Ein Datenbankergebnis wurde benötigt, aber keines gefunden.
    • ObjectDeletedError - Eine refresh() - Operation konnte die Zeile eines Objekts nicht erneut abrufen.
    • UnmappedClassError - Für eine unbekannte Klasse wurde eine Zuordnungsoperation angefordert.
    • UnmappedColumnError - Der Zuordnungsvorgang wurde für eine unbekannte Spalte angefordert.
    • UnmappedError - TODO
    • UnmappedInstanceError - Für eine unbekannte Instanz wurde eine Zuordnungsoperation angefordert.
2

SQLAlchemy wird eine Ausnahme auf Fehler erhöhen ....

+0

Sie mehr sagen? – bodacydo

+0

Die Ausnahmen sind in zwei verschiedenen Modulen - sqlalchemy.exc und sqlalchemy.orm.exc. Ausnahmen werden automatisch ausgelöst, wenn ein Fehler auftritt, anders als der Code in Ihrem Beispiel, wo Sie das selbst tun müssen ... – tholo