我以this为例来帮助我学习sqlalchemy。下面是MySQL数据库:如何在sqlalchemy中表示此查询?
select f.type, f.variety, f.price
from (
select type, min(price) as minprice
from fruits group by type
) as x inner join fruits as f on f.type = x.type and f.price = x.minprice;
这是我到目前为止有:
s = Session()
sq = s.query(func.min(fruit.price)).group_by(fruit.type).subquery()
ans = s.query(fruit).join(sq, fruit.price==sq.c.price).all()
,但它显然是行不通的。我甚至关闭?
我一直在倾注这些docs。 price
是一个PK,如果有帮助..也许我需要一个别名或别的东西。任何帮助或方向表示赞赏。
谢谢。多谢。我得到一个“水果没有属性c”的错误,所以我认为你的意思是'fruit.type',而不是'fruit.c.type'等。如果不是,我想知道你的SA版本是什么正在使用。 (关于附注,你是绝对正确的,我打算把我在这里学到的东西应用到一个更复杂的查询中,该查询选择了最大的'fruit.id',这确实是一个int和PK。) – Paul
我认为在我的例子中'fruit'是一个'Table',而在你的例子中它可能是一个模型类。从你的模型类中,你可以通过做'fruit.__ table__'来获得一个表格。 – van
@van:从模型类获取表格只适用于声明模型;公共接口是'sqlalchemy.orm.attributes.manager_of_class(MAPPED_CLASS).mapper.mapped_table',它可以在任何映射类上工作,不管它们是如何定义的。 – SingleNegationElimination