首页 > 解决方案 > sqlalchemy:另一列中每个值的最大值

问题描述

我正在尝试在 sqlalchemy 中复制这个(postgresql)SQL:

SELECT MAX(building.id) FROM building JOIN owner ON building.owner_id = owner.id WHERE owner.name IN ('rita', 'sue', 'bob') GROUP BY version.name;

这会找到每个指定所有者拥有的一栋建筑物(最新的)(注意:数据已更改以保护无辜者:我保证,为什么我在真实环境中这样做更有意义)。

我有点 sqlalchemy n00b,我不知道如何在 sqlalchemy 中做到这一点。这是我目前得到的:

subquery = db.query(func.max(model.Building.id))
subquery = subquery.filter(model.Building.owner.has(model.Owner.name.in_(names)))
subquery = subquery.group_by(model.Owner.name)
print(subquery.all())

它报告:

ProgrammingError: (psycopg2.errors.UndefinedTable) missing FROM-clause entry for table "owner"

我在这里想念什么?

标签: pythonpostgresqlsqlalchemy

解决方案


知道了!我错过了加入的等价物。此代码有效:

subquery = db.query(func.max(model.Building.id))
subquery = subquery.filter(model.Building.owner_id==model.Owner.id)
subquery = subquery.filter(model.Building.owner.has(model.Owner.name.in_(names)))
subquery = subquery.group_by(model.Owner.name)
print(subquery.all())

推荐阅读