我有一些模型定义,我已经覆盖了他们的__repr__
方法。例如,让我们考虑以下实体:
def A(db.Entity):
id = PrimaryKey(int, auto=True)
name = Required(unicode)
b = Optional("B")
def __repr__(self):
return self.name
def B(db.Entity):
id = PrimaryKey(int, auto=True)
name = Required(unicode)
a = Required("A")
def __repr__(self):
return '{n} from a={aname}'.format(n=self.name, aname = self.a)
它DatabaseSessionIsOver
在我使用Flask-PonyWhoosh 的search(B, 'aaaa
) 方法时引发异常,即使它使用的是包裹在里面:db_session
@orm.db_session
def search(model, *arg, **kw):
return model._wh_.search(*arg, **kw)
__repr__
仅当某些实体以我在上面示例中所做的方式覆盖该方法时才会引发异常 。
但是,我使用以下句子来避免问题:
with db_session:
print(search(A, 'karl'))
所以,很快,问题是,有没有什么办法可以避免使用with ...
,也许修改__repr__
方法或修改包中的方法?
谢谢,
PD:我一直在阅读预取方法,但似乎不合适。我不确定。