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


發佈了46 篇原創文章 · 獲贊 10 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章