如何使用子查询在一对多关系上过滤 sqlalchemy 查询?
How to use a subquery to filter a sqlalchemy query on a one to many relationship?
所以如果我有两个像
这样的 sqlalchemy 表
class Parent
id = Column(Integer, primary_key=True)
children = relationship('Child', lazy='joined', backref=backref('parent', lazy='joined'))
class Child
id = Column(Integer, primary_key=True)
age = Column(Integer)
如何找到所有 parents 中至少有一个 child 年龄 > 10 岁的人?
我已经尝试过类似的方法,尽管这不起作用:
Session.query(Parent.id).filter(func.count(Parent.children.filter(Child.age >= 10)) > 0)
假设这个模型:
class Parent(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
children = relationship('Child', lazy='joined',
backref=backref('parent', lazy='joined'))
class Child(Base):
id = Column(Integer, primary_key=True)
parent_id = Column(ForeignKey(Parent.id))
age = Column(Integer)
使用 any
构造使过滤器工作:
q = (session.query(Parent)
.filter(Parent.children.any(Child.age >= 10))
)
for p in q:
print("{}".format(p))
for c in p.children:
print(" {}".format(c))
所以如果我有两个像
这样的 sqlalchemy 表class Parent
id = Column(Integer, primary_key=True)
children = relationship('Child', lazy='joined', backref=backref('parent', lazy='joined'))
class Child
id = Column(Integer, primary_key=True)
age = Column(Integer)
如何找到所有 parents 中至少有一个 child 年龄 > 10 岁的人?
我已经尝试过类似的方法,尽管这不起作用:
Session.query(Parent.id).filter(func.count(Parent.children.filter(Child.age >= 10)) > 0)
假设这个模型:
class Parent(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
children = relationship('Child', lazy='joined',
backref=backref('parent', lazy='joined'))
class Child(Base):
id = Column(Integer, primary_key=True)
parent_id = Column(ForeignKey(Parent.id))
age = Column(Integer)
使用 any
构造使过滤器工作:
q = (session.query(Parent)
.filter(Parent.children.any(Child.age >= 10))
)
for p in q:
print("{}".format(p))
for c in p.children:
print(" {}".format(c))