【发布时间】:2021-04-11 13:31:16
【问题描述】:
我是 SQLAlchemy 的新手,所以如果问题没有正确表达,请多多包涵。
但我有一个特别的问题想解决。 假设我们有一个父母、孩子和玩具桌。我们在家庭-父母、亲子和儿童玩具之间建立了 m2m 关系。
现在,如果我们想收集所有有玩具的家庭(孩子可以是父母家庭和祖父母家庭的一部分),我们会这样做:
select * from family where parent_id in ( select parent_id from parent where child_id in (select child_id from child where toy_id in (1,2)))
我想将其转换为 SQLAlchemy 或 flask_sqlalchemy 查询。
我知道的一种方法是做类似的事情:
Toy.query.filter(Toy.id.in_((1, 2))).all()
或者在纯 SQLAlchemy 中:
session.query(Toy).filter(Toy.id.in_((1, 2))).all()
然后将输出放入列表推导式中,并将列表用作另一个 where in 的输入。
但这感觉非常低效,因为查询将在每个过滤器/列表理解创建时进行评估。
有什么方法可以在单个 flask_sqlalchemy 或纯 SQLAlchemycommand 中使用此查询,这样它只能被评估一次?
提前感谢您的帮助!
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy