使用Flask-SQLAlchemy中的连接获取一天的最后一条记录

时间:2014-07-31 21:29:05

标签: python flask sqlalchemy flask-sqlalchemy

我有一个给定时间戳和一些值的数据表,我希望得到每天的最后一个值。

在原始SQL中,我会这样做:

SELECT strftime('%Y-%m-%d', a1.created_at) AS created_at,
       a1.my_value
FROM my_table a1
JOIN
  (SELECT max(id) AS MAX
   FROM mytable
   GROUP BY strftime('%Y-%m-%d', created_at)) a2 ON a1.id = a2.MAX;

我正在使用Flask应用程序,我想使用Flask-SQLAlchemy扩展而不是 sqlalchemy.orm.session.Session 或原始SQL。定义的模型如下所示:

class MyModel(SurrogatePK, Model):
  __tablename__ = 'my_table'
  id = Column(db.Integer(), nullable=False, primary_key=True)
  created_at = Column(db.DateTime(), nullable=False, default=dt.datetime.utcnow)
  my_value = Column(db.Integer(), nullable=True)

到目前为止我所拥有的是:

外部查询:

MyModel.query.with_entities(MyModel.created_at, MyModel.my_value)...

内部查询:

MyModel.query.with_entities(func.max(MyModel.id).label('max')).group_by(func.strftime('%Y-%m-%d', MyModel.created_at))

但我无法找到将两者结合在一起以获得所需结果的方法。

1 个答案:

答案 0 :(得分:0)

这就是我在sqlalchemy中的表现,

from sqlalchemy import literal_column

a2 = session.query(func.max(mytable.id).label("MAX"))
     .group_by(func.convert(literal_column('DATE'), mytable.created_at)).subquery()

session.query(func.convert(literal_column('DATE'),
              mytable.created_at).label("created_at"),
              my_table.my_value).join(a2, my_table.id==a2.c.id)