Python Flask 中用 SQLAlchemy 访问 Mysql 数据库

里面用到了Mysql 里专有 DATE_FORMAT 函数来格式化日期,前端用 FusionCharts 来显示数据


def search_keydata():
    tab_name = request.args.get('tab_name', '', type=str)#获取选项卡名
    units = request.args.get('units', '', type=str)#获取统计单位
    data_contrast = request.args.get('data_contrast', '', type=str)#获取数据对比标示符
    apply_item = request.args.get('apply_item', '', type=str)#获取项目名称
    datetime_start = request.args.get('datetime_start', '', type=str)#获取起始日期
    datetime_end = request.args.get('datetime_end', '', type=str)#获取统计终止日期
    #Python中还原JavaScript的escape函数编码后字符串
    units = "".join([(len(i)>0 and unichr(int(i,16)) or "") for i in units.split('%u')])
    if units == u'日':
        search_date_fromat = '%Y-%m-%d'
      elif units == u'月':
        search_date_fromat = '%Y-%m'
    else:
        search_date_fromat = '%Y'
    if datetime_start == '' or '-01':
        datetime_start = '1000-1-1'
    if tab_name == 'A':
        apply_item = "".join([(len(i)>0 and unichr(int(i,16)) or "") for i in apply_item.split('%u')])
        if apply_item == '':
            search_data = db.session.query(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat),\
                                           func.COUNT(ApplyRecord.purpsoe))\
                        .filter(ApplyRecord.applystarttime >= datetime_start)\
                        .filter(ApplyRecord.applystarttime <= datetime_end)\
                        .group_by(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat)).all()
            result_data =  [{"label":data[0],"value":data[1]}
                                      for data in search_data]
        else:
            if data_contrast == 'N':
                search_data = db.session.query(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat),\
                                           func.COUNT(ApplyRecord.purpsoe))\
                        .filter(ApplyRecord.applystarttime >= datetime_start)\
                        .filter(ApplyRecord.applystarttime <= datetime_end)\
                        .filter(ApplyRecord.applyperson == apply_item)\
                        .group_by(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat)).all()
                result_data =  [{"label":data[0],"value":data[1]}
                                      for data in search_data]
            else:
                search_data = db.session.query(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat),\
                                               func.COUNT(ApplyRecord.purpsoe),\
                                               func.SUM(case([(ApplyRecord.applyperson==apply_item,'1')])))\
                            .filter(ApplyRecord.applystarttime >= datetime_start)\
                            .filter(ApplyRecord.applystarttime <= datetime_end)\
                            .group_by(func.DATE_FORMAT(ApplyRecord.applystarttime,search_date_fromat)).all()
                search_data_arr_T = (array(search_data)).T
                search_date = search_data_arr_T[0].tolist()
                data_sum_num = search_data_arr_T[1].tolist()
                data_single_user_num = search_data_arr_T[2].tolist()
                data_sum_num = [0 if data == None else data for data in data_sum_num]
                data_single_user_num = [0 if data == None else data for data in data_single_user_num]
                category_dict_list = [{"label":data}
                                      for data in search_date]
                data_sum_num_dict_list = [{"value":data}
                                      for data in data_sum_num]
                data_single_user_num_dict_list = [{"value":data}
                                      for data in data_single_user_num]
                result_data = []
                result_data.append(category_dict_list)
                result_data.append(data_sum_num_dict_list)
                result_data.append(data_single_user_num_dict_list)
    else:
        if apply_item == '':
            saearch_first = db.session.query(func.DATE_FORMAT(ApplyNum.applydate,search_date_fromat).label("d"),\
                                         (func.SUM(ApplyNum.applynum)/func.COUNT(func.SUBSTRING_INDEX(ApplyNum.purpose,'(',1))).label("n"))\
                        .filter(ApplyNum.applydate >= datetime_start)\
                        .filter(ApplyNum.applydate <= datetime_end)\
                        .group_by(func.SUBSTRING_INDEX(ApplyNum.purpose,'(',1)).subquery()
            search_data = db.session.query(saearch_first.c.d,\
                                               func.SUM(saearch_first.c.n))\
                            .group_by(saearch_first.c.d).all()
        else:
            saearch_first = db.session.query(func.DATE_FORMAT(ApplyNum.applydate,search_date_fromat).label("d"),\
                                             (func.SUM(ApplyNum.applynum)/func.COUNT(func.SUBSTRING_INDEX(ApplyNum.purpose,'(',1))).label("n"))\
                            .filter(ApplyNum.modeltype == apply_item)\
                            .filter(ApplyNum.applydate >= datetime_start)\
                            .filter(ApplyNum.applydate <= datetime_end)\
                            .group_by(func.SUBSTRING_INDEX(ApplyNum.purpose,'(',1)).subquery()
            search_data = db.session.query(saearch_first.c.d,\
                                               func.SUM(saearch_first.c.n))\
                            .group_by(saearch_first.c.d).all()
        # search_data = db.session.query(func.DATE_FORMAT(ApplyNum.applystarttime,search_date_fromat),\
        #                                    func.SUM(ApplyNum.applynum))\
        #                 .func.COUTN(func.DISTINCT(func.SUBSTRING_INDEX(ApplyNum.purpsoe,'(',1)))\
        #                 .filter(ApplyNum.applystarttime >= datetime_start)\
        #                 .filter(ApplyNum.applystarttime <= datetime_end)\
        #                 .group_by(func.DATE_FORMAT(ApplyNum.applystarttime,search_date_fromat)).all()

        result_data =  [{"label":data[0],"value":float(data[1])}
                                  for data in search_data]

    result_data = json.dumps({'search_data':result_data})
    return result_data


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangle63

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值