Python中 SQLAlchemy模块 分组统计、排序、按照时间字段统计、高级查询

@创建日期: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得到两个时间段的每一天的列表

5. query.filter()的常用方法

关于query.filter()的一些常用的方法

6. SQLAlchemy高级查询

SQLAlchemy -高级查询

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值