在这里定义一些基本结构:
class A( Base ):
__tablename__ = 'a'
id = Column( types.Integer(), primary_key = True )
abs = orm.relation( 'AB', lazy='joined' )
class AB( Base ):
__tablename__ = 'ab'
id = Column( types.Integer(), primary_key = True )
a_id = Column( types.Integer(), ForeignKey( 'a.id' ) )
b_id = Column( types.Integer(), ForeignKey( 'b.id' ) )
a = orm.relation( 'A' )
b = orm.relation( 'B', lazy='joined' )
class B( Base ):
__tablename__ = 'b'
id = Column( types.Integer(), primary_key = True )
bas = orm.relation( 'AB' )
现在说我有一个A
与它相关的多个B
s(比如A.id = 1
),我想根据这些B
s 进行过滤。我执行以下查询:
a = db.session.query( A ).join( A.abs ).filter( AB.b_id = 1, A.id = 1 ).first()
在这一点上,我希望len( a.abs ) == 1
,但事实并非如此。换句话说,应用于连接的过滤器不会传播到 orm.relation。我如何得到这种行为?