Flask SQLAlchemy将Datetime与相同日期相结合,并将所有行作为该日期的元组返回

时间:2016-01-07 20:15:22

标签: python sqlalchemy flask-sqlalchemy

我有一个名为'Status'的表,它有一个'created_at'列,它是一个DateTime()对象。我想查询这个表并提取一个元组列表,其中每个元组按相同的Date()分组......到目前为止,我有以下内容:

db.session.query(Status,func.count(Status.created_at)).group_by(cast(Status.created_at, Date).desc()).all()

这给了我一个元组,它由一个Status元素和那些具有相同日期的状态的数量组成。以下是输出示例:

[(<Status(id:1, user_id:2, subject_id:2, updated_at:2016-01-07 01:12:27)>, 3), (<Status(id:3, user_id:2, subject_id:1, updated_at:2016-01-06 16:21:53)>, 2)]

我真正想要的参赛作品如下:

[(<Status(id:1, user_id:2, subject_id:2, updated_at:2016-01-07 01:12:27)>, <Status(id:2, user_id:2, subject_id:1, updated_at:2016-01-07 01:12:27)>, <Status(id:9, user_id:2, subject_id:3, updated_at:2016-01-07 01:12:27)>), (<Status(id:3, user_id:2, subject_id:1, updated_at:2016-01-06 16:21:53)>, <Status(id:8, user_id:2, subject_id:2, updated_at:2016-01-06 16:21:53)>)]
换句话说,而不是那个日期的状态数,我希望所有实际状态都是元组。

非常感谢, 德鲁布彻

1 个答案:

答案 0 :(得分:0)

您只能获取ID列表(或任何其他列)。

PostgreSQL的:

session.query(func.array_agg(Status.id), func.cast(Status.created_at, Date)).group_by(func.cast(status.created_at, Date)) 

MySQL的:

session.query(func.group_concat(Status.id), func.cast(Status.created_at, Date)).group_by...

第一个返回结果如下:

[((1,2,3), date1), ((4,5,6), date2),... ] 

第二个几乎相同,但第一个结果列是字符串,如'1,2,3'而不是元组。

那么,下一步是查询,您将获得上面结果的每个日期(行)的状态对象列表

UPD。正如你所说,你的DBMS是MySQL,你应该使用id分割字符串,如步骤1.1 :)