web-dev-qa-db-fra.com

interception d'exceptions SQLAlchemy

Quelle est l'exception de niveau supérieur avec laquelle je peux intercepter les exceptions SQLAlechmy?

>>> from sqlalchemy import exc
>>> dir(exc)
['ArgumentError', 'CircularDependencyError', 'CompileError', 'ConcurrentModificationError', 'DBAPIError', 'DataError', 'DatabaseError', 'DisconnectionError', 'FlushError', 'IdentifierError', 'IntegrityError', 'InterfaceError', 'InternalError', 'InvalidRequestError', 'NoReferenceError', 'NoReferencedColumnError', 'NoReferencedTableError', 'NoSuchColumnError', 'NoSuchTableError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'SADeprecationWarning', 'SAPendingDeprecationWarning', 'SAWarning', 'SQLAlchemyError', 'SQLError', 'TimeoutError', 'UnboundExecutionError', 'UnmappedColumnError', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
>>> 
41
khelll

De la source :

La classe d'exception de base est SQLAlchemyError.

44
stephan

Pour intercepter toute exception lancée par SQLAlchemy:

from sqlalchemy import exc
db.add(user)
try:
  db.commit()
except exc.SQLAlchemyError:
  pass # do something intelligent here

Voir l'aide (sqlalchemy.exc) et l'aide (sqlalchemy.orm.exc) pour une liste des exceptions possibles que sqlalchemy peut déclencher.

59
bbrame

Selon votre version de SQLAlchemy (par exemple 1.0.4), vous devrez peut-être en faire un peu plus pour accéder à la classe base -SQLAlchemyError:

from flask.ext.sqlalchemy import exc
exceptions = exc.sa_exc

try:
    my_admin = user_models.User('space cadet', active=True)
    db.session.add(my_admin)
    db.session.commit()
except exceptions.SQLAlchemyError:
    sys.exit("Encountered general SQLAlchemyError.  Call an adult!")

ceci est dû au fait sqlalchemy.orm.exc a maintenant la strophe:

"""SQLAlchemy ORM exceptions."""
from .. import exc as sa_exc, util
2
user559633