捕获SQLAlchemy异常

khe*_*lll 38 python sqlalchemy exception

什么是我可以捕获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__']
>>> 
Run Code Online (Sandbox Code Playgroud)

bbr*_*ame 56

捕获SQLAlchemy抛出的任何异常:

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

请参阅help(sqlalchemy.exc)和help(sqlalchemy.orm.exc)以获取sqlalchemy可能引发的可能异常的列表.


ste*_*han 42

来源:

基本异常类是 SQLAlchemyError.

  • @Wes:`DBAPIError` [是]的子类(https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/exc.py#L333)`StatementError`反过来又是[是的子类] ](https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/exc.py#L280)`SQLAlchemyError`.所以,只是捕获`SQLAlchemyError`应该没问题. (3认同)

小智 8

根据您的 SQLAlchemy 版本(例如 1.0.4),您可能需要做更多操作才能到达基类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!")
Run Code Online (Sandbox Code Playgroud)

这是因为sqlalchemy.orm.exc现在有以下节:

"""SQLAlchemy ORM exceptions."""
from .. import exc as sa_exc, util
Run Code Online (Sandbox Code Playgroud)

  • 这是flask-ext-sqlalchemy 尝试包装异常的方式的问题。如果您不使用 Flask 扩展,您可以使用来自 `sqlalchemy.exc` 的基本 `SQLAlchemyError` 捕获 orm 错误...... (2认同)