@创建日期:2020.03.31
@修改日期:2020.03.31,2020.04.13
文章目录
1. 字段分组、统计和排序
- 在调用func.count()函数时,count选择没有Null的字段,以选择id为最好,其次为常量值(func.count(1))。
- 如果选择func.count(DataTable.con_author),当con_author为NULL的时候,统计结果为0。是不符合要求的。
# 按照作者分类统计
def author_stat():
# value_name_list = db.session.query(DataTable.con_author, func.count(DataTable.con_author)). \
value_name_list = db.session.query(DataTable.con_author, func.count(1)). \
group_by(DataTable.con_author).\
order_by(func.count(1).desc()).all()
print("In author_stat() value_name_list: %s" % value_name_list)
return value_name_list
2. 按DateTime字段的年或月或日进行group_by查询
查询2016年5月每天的数据。
参考
# 按照某一天进行统计,只能是1--31之间
# start_day:某年某月的第一天,datetime类型
# end_day:某年某月的最后一天,datetime类型
res = db.session.query(extract('day', DataTable.data_time).label('day'), func.count(DataTable.data_id)) \
.filter(DataTable.data_time.between(start_day, end_day)) \
.group_by('day').all()
3. 按DateTime字段的年月日进行group_by查询
# 按照YYYYMMDD进行统计,可以有很多种
res = db.session.query(func.date_format(DataTable.data_time, '%Y-%m-%d').label('date'),
func.count('*').label('cnt')).\
filter(DataTable.data_time.between(start_day, end_day)).\
group_by('date').all()
参考链接:
# 将时间格式化方法
func.date_format(Table.create_time, "%Y-%m-%d %H:%i:%s")
# 将时间戳转化成时间
func.from_unixtime((Table.timestamp), "%Y-%m-%d %H:%i:%s")
4. python得到特定时间段内,每一天的列表
def time_quantum_list(begin_date=None, end_date=None):
if (begin_date is None) or (begin_date == ''):
return []
if end_date is None:
end_date = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
dt_begin_date = datetime.datetime.strptime(begin_date, '%Y-%m-%d %H-%M-%S')
dt_end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d %H-%M-%S')
print("dt_start_day:%s, dt_end_day: %s" % (dt_begin_date, dt_end_date))
print("dt_start_day:", type(dt_begin_date), " dt_end_day:", type(dt_end_date))
date_list = []
if dt_begin_date > dt_end_date:
return date_list
while dt_begin_date <= dt_end_date:
str_date = dt_begin_date.strftime('%Y-%m-%d')
date_list.append(str_date)
dt_begin_date += datetime.timedelta(days=1)
return date_list
参考链接:python得到两个时间段的每一天的列表