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

Python Flask SQLAlchemy将Datetime与同一日期相结合,并将所有行作为该日期的元组返回,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有一个名为“Status”的表,其中有一列“created_at”,这是一个DateTime()对象。我想查询此表并拉出一个元组列表,其中每个元组按相同的日期进行分组()…到目前为止,我有以下内容: db.session.query(Status,func.count(Status.created_at)).group_by(cast(Status.created_at, Date).desc()).all() 这给了我一个元组,它由一个Status元素和那些具有相同日期的状态的数量组成。以

我有一个名为“Status”的表,其中有一列“created_at”,这是一个DateTime()对象。我想查询此表并拉出一个元组列表,其中每个元组按相同的日期进行分组()…到目前为止,我有以下内容:

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)]
[(3),(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)>)]
[(,),(,)]
换句话说,我希望所有的实际状态都是一个元组,而不是那个日期的状态数

非常感谢,,
Drew Butcher

您只能获取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),... ] 
第二个几乎相同,但第一个结果列是string,类似于'1,2,3'而不是tuple

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


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

您只能获得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),... ] 
第二个几乎相同,但第一个结果列是string,类似于'1,2,3'而不是tuple

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


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

尝试在其上连接表并执行
筛选(Status.created\u at==Status.created\u at)
您使用的是什么dbms?当我执行@Busturdust建议时,我得到了以下信息:sqlalchemy.exc.InvalidRequestError:无法将表/可选的“状态”连接到itself@DrewButcher你确定你做得对吗?应该允许自连接。试着按照session.query(Status,Status).filter(Status.id==Status.id).filter(Status.created\u at==Status.created\u at)试着自己连接表并进行
筛选(Status.created\u at==Status.created\u at)
您使用的是什么dbms?当我执行@Busturdust建议时,我得到了以下信息:sqlalchemy.exc.InvalidRequestError:无法将表/可选的“状态”连接到itself@DrewButcher你确定你做得对吗?应该允许自连接。试试下面的方法:
session.query(Status,Status)。filter(Status.id==Status.id)。filter(Status.created_at==Status.created_at)
db.session.query(func.group_concat(Status.id),func.cast(Status.created_at,Date))。group_by(func.cast(Status.created_at,Date))。all()还给了我[('1,2,3,4,5,6,7,8,9,10','datetime.Date(2016,1,7))]这是所有状态和最新日期。@DrewButcher group\u by(func.cast(Status.created\u at,date))。大写:)db.session.query(func.group_concat(Status.id),func.cast(Status.created_at,Date)).group_by(func.cast(Status.created_at,Date)).all()返回[('1,2,3,4,5,6,7,8,9,10',datetime.Date Date(2016,1,7))],这是所有状态和最新日期。@DrewButcher group_by(func.cast(Status.created_,Date))。大写:)