SQLAlchemy:返回按列

时间:2015-06-11 15:01:00

标签: python sqlalchemy

所有,我遇到了一个(令人惊讶的微不足道的)SQLA请求的问题;目标是返回计数器列中具有最大值的记录:

这很好 - 返回正确的记录:

m=12 # arbitrary example of a max value of counter = 12
qry = session.query(Data).
      filter(Data.user_id == user_id,Data.counter == m)

以下代码不起作用 - 返回None

from sqlalchemy import func
qry = session.query(Data).
      filter(Data.user_id == user_id,
      Data.counter == func.max(Data.counter).select())

请注意,永远不会有多条记录具有最大值(如果相关的话)。

当然,有一种方法可以返回其中一列中具有最大值的记录。任何想法?

1 个答案:

答案 0 :(得分:9)

听起来你可以简单地按降序排序并取第一个结果......

from sqlalchemy import desc

qry = session.query(Data).filter(
      Data.user_id == user_id).order_by(
      desc(Data.counter).limit(1)

但是,如果您担心对大型数据集进行排序,则可以使用子查询...

subqry = session.query(func.max(Data.counter)).filter(Data.user_id == user_id)
qry = session.query(Data).filter(Data.user_id == user_id, Data.counter == subqry)

qry基本上是...的SQL

SELECT * 
FROM data 
WHERE data.user_id = :user_id AND data.counter = (
    SELECT max(data.counter) AS max_1 
    FROM data 
    WHERE data.user_id = :user_id GROUP BY data.user_id
);