这个小组由/命令不工作,重点是在分钟上计算HTTP.statusline
然后返回它。现在它返回多个时间分钟。在数据库中,日期保存为String。
输出示例:
{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
答案 0 :(得分:3)
您正在对日期和状态行进行分组;很可能两个结果之间的状态行不同。
在输出中包含该状态行,或者将其从组和输出列中删除。
包括状态行:
result = [{'date': t.date, 'count': t.count, 'status': t.statusline} for t in query]
会显示出不同之处。
从组和列列表中删除列:
query = session.query(HTTP.date, func.count(HTTP.statusline).
label('count')).filter(HTTP.statusline.like('%'+status+'%'), HTTP.date>=(DD)).group_by(HTTP.date).order_by(asc(HTTP.date)).all()
您可以使用.contains(status)
代替.like('%'+status+'%')
;它通常是实现作为LIKE但你不必自己进行%
连接。