2013-10-30 46 views
10

我要列出最近修改的資源爲一組,對於我能做到這一點查詢選擇我如何只能選擇resource_group_id和last_modified列?SQLAlchemy的,最大,GROUP_BY和ORDER_BY

在SQL我想是這樣的:

SELECT resource_group_id, max(last_modified) AS max_1 
FROM resource GROUP BY resource_group_id ORDER BY max_1 DESC 

回答

6
model.Session.query(
    model.Resource.resource_group_id, func.max(model.Resource.last_modified) 
).group_by(model.Resource.resource_group_id).order_by(
    func.max(model.Resource.last_modified).desc()) 
3

你已經知道了,但我會試着解釋這是怎麼回事與供將來參考原始查詢。

在SQLAlchemy中,如果你指定query(model.Resource, ...),模型參考,它會列出在生成的SQL SELECT語句的資源表中的每一列,所以你的原始查詢看起來是這樣的:

SELECT resource.resource_group_id AS resource_group_id, 
     resource.extra_column1 AS extra_column1, 
     resource.extra_column2 AS extra_column2, 
     ... 
     count(resource.resource_group_id) AS max_1 
GROUP BY resource_group_id ORDER BY max_1 DESC; 

此次榮獲」 t與GROUP BY一起工作。

避免這種情況的一種常用方法是指定將它們添加到查詢方法要明確選擇哪些列.query(model.Resource.resource_group_id)