您的位置:首页 > 编程语言 > Python开发

Python Flask 中用 SQLAlchemy 访问 Mysql 数据库

2016-08-15 15:51 603 查看
里面用到了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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: