我們在使用SQLAlchemy模塊進行數據操作過程,往往會出現一些錯誤,因此我們需要捕捉到這些錯誤,並進行一場處理。
例子如下:
from sqlalchemy.exc import SQLAlchemyError db = SQLAlchemy() def commit(): try: db.session.add(self.table) db.session.commit() except SQLAlchemyError as e: db.session.rollback() finally: db.session.close()
下面是sqlalchemy本身可能引發的錯誤列表,這些錯誤來自 help(sqlalchemy.exc) 和 help(sqlalchemy.orm.exc):
sqlalchemy.exc系列: ArgumentError----------------------------在提供無效或沖突的函數參數時引發。 CircularDependencyError------------------檢測到循環依賴項時由拓撲排序引發。 CompileError-----------------------------在SQL編譯期間發生錯誤時引發。 ConcurrentModificationError--------------同步修改數據發生錯誤時引發。 DBAPIError-------------------------------數據庫操作執行失敗時引發。 如果在執行SQL時發生錯誤引發操作 語句,該語句及其參數將在 statement和params屬性中的異常對象。 包裝的異常對象在orig屬性中可用。 它的類型和屬性是特定於DB-API實現的。 DataError包裝DB-APIDataError。 DatabaseError----------------------------包裝DB-APIDatabaseError。 DisconnectionError-----------------------在原始DB-API連接上檢測到斷開連接。 由PoolListener引發,以便主機池強制斷開連接。 IdentifierError--------------------------當架構名稱超過最大字符限制時引發 IntegrityError---------------------------包裝DB-APIIntegrityError。 InterfaceError---------------------------包裝DB-APIInterfaceError。 InternalError----------------------------包裝DB-APIInternalError。 InvalidRequestError----------------------SQLAlchemy被要求做一些它不能做的事情。此錯誤通常對應於運行時狀態錯誤。 NoReferenceError-------------------------由ForeignKey引發,表示無法解析引用。 NoReferencedColumnError------------------在找不到引用的Column時由ForeignKey引發。 NoReferencedTableError-------------------在找不到引用的Table時由ForeignKey引發。 NoSuchColumnError------------------------從RowProxy請求不存在的列。 NoSuchTableError-------------------------表不存在或對連接不可見。 NotSupportedError------------------------包裝DB-APINotSupportedError。 OperationalError-------------------------包裝DB-APIOperationalError。 ProgrammingError-------------------------包裝DB--APIProgrammingError。 SADeprecationWarning---------------------每次使用不推薦的API時發布一次。 SAPendingDeprecationWarning--------------每次使用不推薦的API時發布一次。 SAWarning--------------------------------在運行時發出。 SQLAlchemyError--------------------------一般錯誤類。 SQLError---------------------------------數據庫操作執行失敗時引發。 TimeoutError-----------------------------當連接池在獲取連接時超時時引發。 UnboundExecutionError--------------------嘗試在沒有數據庫連接的情況下執行SQL。 UnmappedColumnError----------------------對未知列請求了映射操作。 sqlalchemy.orm.exc系列: FlushError-------------------------------后期修改表字段的時候,不會自動的映射到數據庫中,需要重新映射,使用flask-migrate。 ConcurrentModificationError--------------行已在工作單元之外被修改。 FlushError-------------------------------在flush()期間檢測到無效條件。 MultipleResultsFound---------------------需要一個數據庫結果,但找到多個。 NoResultFound----------------------------需要數據庫結果,但未找到。 ObjectDeletedError-----------------------Arefresh()操作無法重新檢索對象的行。 UnmappedClassError-----------------------為未知類請求了映射操作。 UnmappedColumnError----------------------對未知列請求了映射操作。 UnmappedError----------------------------待辦事項 UnmappedInstanceError--------------------為未知實例請求了映射操作。
結束!