flask-sqlalchemy group_by,最大ID

时间:2016-10-18 07:34:27

标签: python mysql sqlalchemy

我有一张这样的桌子 enter image description here

现在我想获取ip为uniq且id为max。

的数据
In [53]: ModuleInfo.query.group_by(ModuleInfo.ip).all()
Out[53]:
[<ModuleInfo 1>,
 <ModuleInfo 5>,
 <ModuleInfo 14>,
 <ModuleInfo 16>,
 <ModuleInfo 20>,
 <ModuleInfo 17>,
 <ModuleInfo 28>,
 <ModuleInfo 27>]

retuan值不是最大ID,我想ip:127.0.0.1 - &gt; id:4,我使用order_by id,但它只是反转列表。

当我尝试使用distinct时,我发现它不起作用:

In [51]: ModuleInfo.query.distinct(ModuleInfo.ip).all()
Out[51]:
[<ModuleInfo 1>,
 <ModuleInfo 2>,
 <ModuleInfo 3>,
 <ModuleInfo 4>,
 <ModuleInfo 5>,
 <ModuleInfo 6>,
 <ModuleInfo 7>,
 <ModuleInfo 14>,
 <ModuleInfo 15>,
 <ModuleInfo 16>,
 <ModuleInfo 17>,
 <ModuleInfo 18>,
 <ModuleInfo 19>,
 <ModuleInfo 20>,
 <ModuleInfo 21>,
 <ModuleInfo 22>,
 <ModuleInfo 23>,
 <ModuleInfo 24>,
 <ModuleInfo 25>,
 <ModuleInfo 26>,
 <ModuleInfo 27>,
 <ModuleInfo 28>,
 <ModuleInfo 29>,
 <ModuleInfo 30>]

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

from sqlalchemy import func
foo = Session.query(func.max(ModuleInfo.id),ModuleInfo.ip).\
    group_by(ModuleInfo.ip).order_by(ModuleInfo.ip).all()

我使用了声明式基础和作用域Session来运行测试,但想法是一样的。您应该收到一个带有(max(id),ip)元组的列表。

哈努哈利