我有一个SQLite数据库并使用SQLAlchemy将表映射到类。生成布局是我有一个父表和一个子表。父类可以有多个子节点,子节点只有一个父节点。将子项加载到自定义集合类中,以进行各种前后处理。
在加载Child类时,有时可能会引发异常。这有些异常操作,通常是由于数据库损坏或极其旧的数据库,但它确实需要干预。但是,我似乎没有任何方法可以捕获此异常。
作为一种解决方法,我假设不是引发异常,而是使用self.delete = True
标记该类,并在加载到集合类时检查它。但它仍然引发了一个问题,即如何处理从数据库映射器加载类时可能引发的异常?
编辑:
我忘了提到异常发生在我的@reconstructor
方法中,SQLAlchemy在加载对象后调用了
答案 0 :(得分:0)
对此进行处理的一种相当简单的方法是在适当的and
子句中包装对子项的访问。为了避免在整个地方都有try-except
个条款,例如将关系包装在标准的python属性中:
try-except
显然,这不会处理从其他地方触发加载class Parent:
# your current standard children relationship
_children = relationship('Child')
@property
def children(self):
# try accessing and possibly loading the children
try:
return self._children
# catch and handle the possibly occuring exception
except WhatEverException:
handleException()
实例的情况,但它可能会启动。
当然,更好的选择是尝试避免例外。 但这当然在很大程度上取决于你实际谈论的例外情况。