2010-02-03 208 views
26

什麼是可以捕獲SQLAlechmy異常的上層異常?捕獲SQLAlchemy異常

>>> 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__'] 
>>> 

回答

28

the source來自:

基部異常類是 SQLAlchemyError

+0

您可能需要使用兩個異常類。 '由於DBAPI異常而引發的異常是DBAPIError的所有子類。「http://docs.sqlalchemy.org/en/latest/core/exceptions.html#sqlalchemy.exc.SQLAlchemyError – Wes 2018-01-30 15:17:02

+1

@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'應該沒問題。 – stephan 2018-01-31 11:33:44

33

捕捉任何異常的SQLAlchemy拋出:對於SQLAlchemy的可以提高可能的例外列表

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

請參閱幫助(sqlalchemy.exc)和幫助(sqlalchemy.orm.exc)。

2

根據您的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!") 

這是因爲sqlalchemy.orm.exc現在有節:

"""SQLAlchemy ORM exceptions.""" 
from .. import exc as sa_exc, util 
+1

這是flask-ext-sqlalchemy試圖包裝異常的方式的一個問題。如果你沒有使用Flask擴展,你可以用'sqlalchemy.exc'中的基類'SQLAlchemyError'來捕捉orm錯誤。 – cowbert 2017-08-28 00:03:05