这个 group by / order by 是行不通的,关键是HTTP.statusline
按分钟计算,然后返回。现在它返回一分钟的多个时间。在数据库中,日期保存为字符串。
输出示例:
{u'date': u'2013-03-12 11:23:48', u'count': 21}
但是有些东西返回了一个以上的值,如下所示:
{u'date': u'2013-03-12 11:36:21', u'count': 2}, {u'date': u'2013-03-12 11:36:21', u'count': 8}]
代码:
def statusline_date(status):
session = load_session()
now = datetime.datetime.now()
DD = now - datetime.timedelta(minutes=60)
DD = DD.strftime('%Y-%m-%d %H:%M:%S')
#query = session.query(HTTP.date, extract('minute', HTTP.date).label('min'), HTTP.statusline, func.count(HTTP.statusline).
# label('count')).filter(HTTP.statusline.like('%'+status+'%'), HTTP.date>=(DD+'%')).group_by('min').all()
query = session.query(HTTP.date, HTTP.statusline, func.count(HTTP.statusline).
label('count')).filter(HTTP.statusline.like('%'+status+'%'), HTTP.date>=(DD)).group_by(HTTP.date, HTTP.statusline).order_by(asc(HTTP.date)).all()
result = [{'date': t.date, 'count': t.count} for t in query]
return result