使用SQLAlchemy,我希望在加载父级时热切地加入父级的子级,但如果没有子级则不加入

时间:2015-12-31 19:41:22

标签: sqlalchemy

我在PostgreSQL中有一些简单的表,我的模型定义如下:

for ( int i = 0; i < [publishPermissions count]; i++)
{
    if ( ![publishSession.permissions containsObject:[publishPermissions objectAtIndex:i]] )
    {
        release = true;
        publishError = [[NSError alloc] initWithDomain:@"com.facebook" code:123 userInfo:nil];
        break;
    }
}

其中Child有一个名为parent_id的FK,指向Parent。

当我加载父项时,我希望它的子项立即加载一个join语句,这就是这个定义所做的。

但是,如果父级没有子级,则不会为父级添加如下语句:

class Parent(Base):
    children = relationship('Child', backref='parent', innerjoin=True, lazy='joined')
class Child(Base):
    pass

Raw SQL + SQLAlchemy:

parent = session.query(Parent).get(parent_id)
parent == None

1 个答案:

答案 0 :(得分:0)

我发现您可以使用sqlalchemy.orm.lazyload

动态指定加载类型
>>> session.query(Parent).options(lazyload('children')).get(147195) == None
False