假设父母和孩子有两张桌子(使用SQLAlchemy):
class Child(Base):
__tablename__ = 'Child'
id = Column(Integer, primary_key=True)
is_boy = Column(Boolean, default=False)
parent_id = Column(Integer, ForeignKey('Parent.id'))
class Parent(Base):
__tablename__ = 'Parent'
id = Column(Integer, primary_key=True)
children = relationship("Child", backref="parent")
如何查询属性是否父母是否有孩子?希望在pandas中使用此列但不确定如何有效地查询它。我的直觉是创建一个SQLALchemy混合属性has_a_boy_child,但我不确定如何定义混合属性或匹配表达式。谢谢!
答案 0 :(得分:3)
按照Correlated Subquery Relationship Hybrid示例,我将构建一个返回{child}童子的属性:
count
您可以像以下一样使用它:
@hybrid_property
def has_a_boy_child(self):
return any(child.is_boy for child in self.children)
@has_a_boy_child.expression
def has_a_boy_child(cls):
return (
select([func.count(Child.id)])
.where(Child.parent_id == cls.id)
.where(Child.is_boy == True)
.label("number_of_boy_children")
)
更新:如果您真的想要q_has_boys = session.query(Parent).filter(Parent.has_a_boy_child).all()
q_no_boys = session.query(Parent).filter(~Parent.has_a_boy_child).all()
q_attr = session.query(Parent, Parent.has_a_boy_child).all()
而非bool
(pandas中count
为None
),您可以如下所示:
na