假设我有一个像这样的类:
class Foo(declarativeBase):
bars1 = relationship(Bar.Bar, secondary=foos_to_bars1, collection_class=set())
bars2 = relationship(Bar.Bar, secondary=foos_to_bars2, collection_class=list())
每个关系都给我一些带有特定条件的“Bar”实例。在某个时刻,我想获取任何一个关系中具有“bar”(Bar.Bar实例)的“Foo”实例。
如果我尝试执行以下操作:
def inAnyBar(bar)
query(Foo).filter(or_(Foo.bars1.contains(bar), Foo.bars2.contains(bar)).all()
我得到了一个空结果。
看起来(对我来说)像是我在执行以下操作:
query(Foo).join(Foo.bars1).filter(Foo.bars1.contains(bar)).\
join(Foo.bars2).filter(Foo.bars1.contains(bar))
由于Foo.bars1不包含bar,第二个过滤器返回空结果。
我已经找到了使用子查询的解决方法(每个连接+过滤器在一个子查询中,然后对所有子查询进行or_操作),但我想知道是否有更好的方法来处理它...
我找到了这个链接:http://techspot.zzzeek.org/2008/09/09/selecting-booleans/,它可以做到我想做的事情,但它适用于SqlAlchemy 0.5,我(几乎)确定在SqlAlchemy 0.6.6中有一种“更简洁”的方法来处理它。
谢谢!