Python-web: Flask 应用、数据库查询数据、API接口
2017-08-09 20:54
846 查看
一个超简单的Flask应用helloword
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
数据库查询、与数据API
关于对数据库查询操作可参考:Python:数据库操作模块SQLAlchemy查询
#coding=utf-8 from flask import Flask,request,url_for,g,render_template,session,redirect,flash,jsonify from flask.ext.sqlalchemy import SQLAlchemy from threading import Thread from collections import defaultdict import config import jsonObjects import os import sqlalchemy import json #import datetime 与kbredisclient2 重复 from jsonCoder import MyDecoder,MyEncoder from kbredisclient2 import * app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:root@10.240.123.104:3306/db_news_news_report?charset=utf8' app.config.from_object(config) app.secret_key=app.config['SECERT_KEY'] db = SQLAlchemy(app) engine = sqlalchemy.create_engine('mysql://root:root@10.240.123.104:3306/db_news_news_report?charset=utf8', echo=True) DB_Session =sqlalchemy.orm.sessionmaker(bind=engine) conn = DB_Session() opath='/data/wwwroot/htdocs/vitamin/reason_index' merge_reasons=defaultdict(list) for f in os.listdir(opath): p=opath+'/'+f if os.path.isfile(p): with open(p) as fin: for line in fin.readlines(): merge_reasons[f].append(line.strip()) from models import contact from models import HourStatic,DayStatic,RHourStatic,RDayStatic,WholeStatic,HourWholeStatic,DayWholeStatic,RHourWholeStatic @app.route('/showdata/<ip>/<reason>/<start>/<end>/<tp>',methods=['POST','GET']) def showdata(ip,reason,start,end,tp): res={} ret=200 Message='Successful return' data={} title={} showstitle='展示数' clickstitle='点击数' ctrtitle='点击率' sratetitle='展示占比' title['shows']=showstitle title['clicks']=clickstitle title['ctr']=ctrtitle title['srate']=sratetitle obj=getQueryResult(ip,reason,start,end,tp) clicks=obj['data']['clicks'] ctr=obj['data']['ctr'] srate=obj['data']['srate'] times=obj['data']['times'] shows=obj['data']['shows'] if(len(ctr)<=0 and len(srate)<=0): ret=201 Message='Error' data['shows']=shows data['clicks']=clicks data['ctr']=ctr data['srate']=srate data['times']=times res['ret']=ret res['message']=Message res['data']=data res['title']=title maxv=1 if len(ctr)>0: if len(ctr)==1: maxv=max(maxv,ctr[0]) else: maxv=max(maxv,max(ctr)) if len(srate)>0: if len(clicks)==1: maxv=max(maxv,srate[0]) else: maxv=max(maxv,max(srate)) minv=0 maxv=maxv*1.2 gap=maxv/10 axis={} axis['max']=maxv axis['min']=minv axis['gap']=gap res['axis']=axis return json.dumps(res,indent=4,sort_keys=True) @app.route('/test/<ip>/<reason>/<start>/<end>/<tp>',methods=['POST','GET']) def getQueryResult(ip,reason,start,end,tp): Message='Successful return' title={} showstitle='展示数' clickstitle='点击数' ctrtitle='点击率' sratetitle='展示占比' title['shows']=showstitle title['clicks']=clickstitle title['ctr']=ctrtitle title['srate']=sratetitle data={} args=[] ip=ip.strip() reason=reason.strip() start=start.strip() start=start.replace('_',' ') end=end.strip() end=end.replace('_',' ') tp=tp.strip() ips=ip.split(',') if('all' not in ips): args.append(ip) if('all' not in reason): args.append(reason) args.append(start) args.append(end) args.append(tp) shows=[] clicks=[] ctr=[] srate=[] times=[] qres1=None qres2=None items=None data['ips']=ips if len(args)==5: if args[4]!='h' and args[4]!='d': Message='select type error' if(args[4]=='h' and Message=='Successful return'): if not merge_reasons.has_key(reason): qres1=db.session.query(HourStatic.static_time,sqlalchemy.sql.func.sum(HourStatic.shownum),sqlalchemy.sql.func.sum(HourStatic.clicknum)).filter(HourStatic.ip.in_(ips),HourStatic.reason==args[1],HourStatic.static_time.between(args[2],args[3])).group_by(HourStatic.static_time).order_by(sqlalchemy.asc(HourStatic.static_time)).all() else: qres1=db.session.query(HourStatic.static_time,sqlalchemy.sql.func.sum(HourStatic.shownum),sqlalchemy.sql.func.sum(HourStatic.clicknum)).filter(HourStatic.ip.in_(ips),HourStatic.reason.in_(merge_reasons[reason]),HourStatic.static_time.between(args[2],args[3])).group_by(HourStatic.static_time).order_by(sqlalchemy.asc(HourStatic.static_time)).all() qres2=db.session.query(HourWholeStatic.static_time,sqlalchemy.sql.func.sum(HourWholeStatic.shownum)).filter(HourWholeStatic.ip.in_(ips),HourWholeStatic.static_time.between(args[2],args[3])).group_by(HourWholeStatic.static_time).group_by(HourWholeStatic.static_time).order_by(sqlalchemy.asc(HourWholeStatic.static_time)).all() elif(args[4]=='d' and Message=='Successful return'): if not merge_reasons.has_key(reason): qres1=db.session.query(DayStatic.static_date,sqlalchemy.sql.func.sum(DayStatic.shownum),sqlalchemy.sql.func.sum(DayStatic.clicknum)).filter(DayStatic.ip.in_(ips),DayStatic.reason==args[1],DayStatic.static_date.between(args[2],args[3])).group_by(DayStatic.static_date).order_by(sqlalchemy.asc(DayStatic.static_date)).all() else: qres1=db.session.query(DayStatic.static_date,sqlalchemy.sql.func.sum(DayStatic.shownum),sqlalchemy.sql.func.sum(DayStatic.clicknum)).filter(DayStatic.ip.in_(ips),DayStatic.reason.in_(merge_reasons[reason]),DayStatic.static_date.between(args[2],args[3])).group_by(DayStatic.static_date).order_by(sqlalchemy.asc(DayStatic.static_date)).all() qres2=db.session.query(DayWholeStatic.static_date,sqlalchemy.sql.func.sum(DayWholeStatic.shownum)).filter(DayWholeStatic.ip.in_(ips),DayWholeStatic.static_date.between(args[2],args[3])).group_by(DayWholeStatic.static_date).order_by(sqlalchemy.asc(DayWholeStatic.static_date)).all() elif len(args)==4: if args[3]!='h' and args[3]!='d': Message='select type error' if(ip=='all'): if(args[3]=='h' and Message=='Successful return'): if not merge_reasons.has_key(reason): qres1=db.session.query(RHourStatic.static_time,RHourStatic.shownum,RHourStatic.clicknum).filter(RHourStatic.reason==args[0],RHourStatic.static_time.between(args[1],args[2])).order_by(sqlalchemy.asc(RHourStatic.static_time)).all() else: qres1=db.session.query(RHourStatic.static_time,sqlalchemy.sql.func.sum(RHourStatic.shownum),sqlalchemy.sql.func.sum(RHourStatic.clicknum)).filter(RHourStatic.reason.in_(merge_reasons[reason]),RHourStatic.static_time.between(args[1],args[2])).group_by(RHourStatic.static_time).order_by(sqlalchemy.asc(RHourStatic.static_time)).all() qres2=db.session.query(RHourWholeStatic.static_time,RHourWholeStatic.shownum).filter(RHourWholeStatic.static_time.between(args[1],args[2])).order_by(sqlalchemy.asc(RHourWholeStatic.static_time)).all() elif(args[3]=='d' and Message=='Successful return'): if not merge_reasons.has_key(reason): qres1=db.session.query(RDayStatic.static_date,RDayStatic.shownum,RDayStatic.clicknum).filter(RDayStatic.reason==args[0],RDayStatic.static_date.between(args[1],args[2])).order_by(sqlalchemy.asc(RDayStatic.static_date)).all() else: qres1=db.session.query(RDayStatic.static_date,sqlalchemy.sql.func.sum(RDayStatic.shownum),sqlalchemy.sql.func.sum(RDayStatic.clicknum)).filter(RDayStatic.reason.in_(merge_reasons[reason]),RDayStatic.static_date.between(args[1],args[2])).group_by(RDayStatic.static_date).order_by(sqlalchemy.asc(RDayStatic.static_date)).all() qres2=db.session.query(WholeStatic.static_date,WholeStatic.shownum).filter(WholeStatic.static_date.between(args[1],args[2])).order_by(sqlalchemy.asc(WholeStatic.static_date)).all() elif(reason=='all'): if(args[3]=='h' and Message=='Successful return'): items=db.session.query(HourWholeStatic.static_time,sqlalchemy.sql.func.sum(HourWholeStatic.shownum),sqlalchemy.sql.func.sum(HourWholeStatic.clicknum)).filter(HourWholeStatic.ip.in_(ips),HourWholeStatic.static_time.between(args[1],args[2])).group_by(HourWholeStatic.static_time).order_by(sqlalchemy.asc(HourWholeStatic.static_time)).all() elif(args[3]=='d' and Message=='Successful return'): items=db.session.query(DayWholeStatic.static_date,sqlalchemy.sql.func.sum(DayWholeStatic.shownum),sqlalchemy.sql.func.sum(DayWholeStatic.clicknum)).filter(DayWholeStatic.ip.in_(ips),DayWholeStatic.static_date.between(args[1],args[2])).group_by(DayWholeStatic.static_date).order_by(sqlalchemy.asc(DayWholeStatic.static_date)).all() elif len(args)==3: if args[2]=='d': items=db.session.query(WholeStatic.static_date,WholeStatic.shownum,WholeStatic.clicknum).filter(WholeStatic.static_date.between(args[0],args[1])).order_by(sqlalchemy.asc(WholeStatic.static_date)).all() elif args[2]=='h': items=db.session.query(RHourWholeStatic.static_time,RHourWholeStatic.shownum,RHourWholeStatic.clicknum).filter(RHourWholeStatic.static_time.between(args[0],args[1])).order_by(sqlalchemy.asc(RHourWholeStatic.static_time)).all() elif args[2]=='w': items=conn.execute("select DATE_FORMAT(static_date,'%%Y%%u') week,sum(shownum) as shownum,sum(clicknum) as clicknum from tb_day_whole_static where static_date>='%s' and static_date<='%s' group by week;"%(args[0],args[1])).fetchall() elif args[2]=='m': items=conn.execute("select DATE_FORMAT(static_date,'%%Y%%m') month,sum(shownum) as shownum,sum(clicknum) as clicknum from tb_day_whole_static where static_date>='%s' and static_date<='%s' group by month;"%(args[0],args[1])).fetchall() else: Message='the num of input parameter error!' time_format={'h':'%Y%m%d_%H','d':'%Y%m%d'} if (qres1 is not None) and (qres2 is not None): tdict={} for it in qres2: tdict[it[0]]=it[1] for it1 in qres1: if tdict.has_key(it1[0]): shows.append(long(it1[1])) clicks.append(long(it1[2])) ctr.append(float(it1[2])/float(it1[1])) srate.append(float(it1[1])/float(tdict[it1[0]])) times.append(it1[0].strftime(time_format[tp])) elif items is not None: for it1 in items: shows.append(long(it1[1])) clicks.append(long(it1[2])) ctr.append(float(it1[2])/float(it1[1])) if tp in time_format.keys(): times.append(it1[0].strftime(time_format[tp])) else: times.append(it1[0]) if isinstance(items, sqlalchemy.engine.result.ResultProxy): items.close() ret=200 if(len(ctr)>0): ctr=[round(100*e,2) for e in ctr] if(len(srate)>0): srate=[round(100*e,2) for e in srate] if(len(ctr)<=0 and len(srate)<=0): ret=201 data['shows']=shows data['clicks']=clicks data['ctr']=ctr data['srate']=srate data['times']=times res={} res['debug_num_merge_reasons']=len(merge_reasons) res['data']=data res['title']=title return res #return json.dumps(res,indent=4,sort_keys=True) @app.route('/get_2ips_data/<ip1>/<ip2>/<reason>/<start>/<end>/<tp>',methods=['POST','GET']) def get_2ips_data(ip1,ip2,reason,start,end,tp): data1=getQueryResult(ip1,reason,start,end,tp) data2=getQueryResult(ip2,reason,start,end,tp) set1=set(data1['data']['times']) set2=set(data2['data']['times']) un=list(set1 & set2) shows=[] clicks=[] ctr=[] srate=[] times=[] shows2=[] clicks2=[] ctr2=[] srate2=[] times2=[] if len(un)==0: ret=201 else: time1=data1['data']['times'] if time1!=un: for i in range(len(time1)): if time1[i] in un: shows.append(data1['data']['shows'][i]) clicks.append(data1['data']['clicks'][i]) ctr.append(data1['data']['ctr'][i]) if(len(data1['data']['srate'])>i): srate.append(data1['data']['srate'][i]) times.append(time1[i]) data1['data']['shows']=shows data1['data']['clicks']=clicks data1['data']['ctr']=ctr data1['data']['srate']=srate data1['data']['times']=times else: ctr=data1['data']['ctr'] srate=data1['data']['srate'] time2=data2['data']['times'] if time2!=un: for i in range(len(time2)): if time2[i] in un: shows2.append(data2['data']['shows'][i]) clicks2.append(data2['data']['clicks'][i]) ctr2.append(data2['data']['ctr'][i]) if(len(data2['data']['srate'])>i): srate2.append(data2['data']['srate'][i]) times2.append(time2[i]) data2['data']['shows']=shows2 data2['data']['clicks']=clicks2 data2['data']['ctr']=ctr2 data2['data']['srate']=srate2 data2['data']['times']=times2 else: ctr2=data2['data']['ctr'] srate2= data2['data']['srate'] res={} res['ip1']=data1 res['ip2']=data2 axis1={} axis2={} maxv=2 if len(ctr)>0: if len(ctr)==1: maxv=max(maxv,ctr[0]) else: maxv=max(maxv,max(ctr)) if len(ctr2)>0: if len(ctr2)==1: maxv=max(maxv,ctr2[0]) else: maxv=max(maxv,max(ctr2)) minv=0 maxv=maxv*1.2 gab=maxv/10 axis1['max']=maxv axis1['min']=minv axis1['gap']=gab maxv=2 if len(srate)>0: if len(srate)==1: maxv=max(maxv,srate[0]) else: maxv=max(maxv,max(srate)) if len(srate2)>0: if len(srate2)==1: maxv=max(maxv,srate2[0]) else: maxv=max(maxv,max(srate2)) maxv=maxv*1.6 axis2['max']=maxv axis2['min']=minv axis2['gap']=maxv/10 res['axis1']=axis1 res['axis2']=axis2 res['ret']=202 #两个ip都有数据的标识 return json.dumps(res,indent=4,sort_keys=True) @app.route('/getnewsinfo/<start>/<end>/<newsID>',methods=['POST','GET']) def getnewsinfo(start,end,newsID): rc=KBRedisClient(REDIS_MASTER,REDIS_DBNAME) newsID=newsID.strip() if newsID.endswith('00'): newsID=newsID[:len(newsID)-2] data=rc.getdata(newsID) res={} ret=data['ret'] newsid=data['title'] shows=data['data']['show'] clicks=data['data']['click'] ctr=data['data']['ctr'] srate=data['data']['srate'] times=data['data']['time'] title={} showstitle='展示数' clickstitle='点击数' ctrtitle='点击率' sratetitle='累计点击率' title['shows']=showstitle title['clicks']=clickstitle title['ctr']=ctrtitle title['srate']=sratetitle res['title']=title maxv=1 ctr=data['data']['ctr'] srate=data['data']['srate'] if(len(ctr)>0): ctr=[round(e,2) for e in ctr] if(len(srate)>0): srate=[round(e,2) for e in srate] if len(ctr)>0: if len(ctr)==1: maxv=max(maxv,ctr[0]) else: maxv=max(maxv,max(ctr)) if len(srate)>0: if len(clicks)==1: maxv=max(maxv,srate[0]) else: maxv=max(maxv,max(srate)) minv=0 maxv=maxv*1.2 gap=maxv/10 axis={} axis['max']=maxv axis['min']=minv axis['gap']=gap axis1={} axis2={} maxv=1 if len(shows)>0: if len(shows)==1: maxv=max(maxv,shows[0]) else: maxv=max(maxv,max(shows)) maxv=maxv*1.2 gab=maxv/10 axis1['max']=maxv axis1['min']=minv axis1['gap']=gab maxv=1 if len(clicks)>0: if len(clicks)==1: maxv=max(maxv,clicks[0]) else: maxv=max(maxv,max(clicks)) axis2['max']=maxv*1.2 axis2['min']=minv axis2['gap']=maxv*1.2/10 data['title']=title message="Successful return" if not ret==200: message='data empty' res['message']=message res['ret']=ret datas={} datas['shows']=shows datas['clicks']=clicks datas['times']=times datas['ctr']=ctr datas['srate']=srate res['data']=datas res['title']=title res['axis']=axis res['axis1']=axis1 res['axis2']=axis2 fout=open(os.getcwd()+'/data/newsinfo.json','w+') jsonobj=json.dumps(res,indent=4); fout.write(jsonobj) return jsonobj @app.route('/getinfo') def getinfo(): res={} ret=200 Message='Successful return' data={} qres1=db.session.query(sqlalchemy.distinct(DayStatic.ip)).all() qres2=db.session.query(sqlalchemy.distinct(DayStatic.reason)).all() ips=[] reasons=[] ch=[] num=[] if len(merge_reasons)>0: for key in merge_reasons.keys(): ch.append(key) for item in qres1: ips.append(item[0]) for item in qres2: try: int(item[0]) num.append(int(item[0])) except ValueError: ch.append(item[0]) ch.sort() num.sort() ips.sort() for e in num: ch.append(str(e)) data['ips']=ips data['reasons']=ch res['ret']=ret res['message']=Message res['data']=data fout=open(os.getcwd()+'/data/ipsandreasons.json','w+') jsonobj=json.dumps(res,indent=4); fout.write(jsonobj) return json.dumps(res,indent=4) @app.route('/news_report/<start>/<end>/<tp>') def report(start,end,tp): #获取从前一天零点开始到目前,CF、RCMT、VIDEO三个模块及整体的CTR及展示变化情况。 now=datetime.now() td=timedelta(days=1) END=now.strftime('%Y-%m-%d_%H:00:00') START=(now-td).strftime('%Y-%m-%d_00:00:00') if start==None or len(start)==0 or end==None or len(end)==0: start=START end=END names=['CF','RCMT','VIDEO','all'] ctr_vals=[] srate_vals=[] ctr_title=[] srate_title=[] ctr_axis={} srate_axis={} times=None ctr_maxv=1 srate_maxv=1 for it in names: res=getQueryResult('all',it,start,end,tp) ctr_vals.append(getModel(it+'-点击率',res['data']['ctr'])) srate_vals.append(getModel(it+'-展示占比',res['data']['srate'])) ctr_maxv=max(ctr_maxv,max(res['data']['ctr'])) ctr_title.append(it+'-点击率') srate_title.append(it+'-展示占比') if it =='all': times=res['data']['times'] else: srate_maxv=max(srate_maxv,max(res['data']['srate'])) ctr_axis['max']=ctr_maxv*1.2 ctr_axis['min']=0 ctr_axis['gap']=ctr_maxv*1.2/10 srate_axis['max']=srate_maxv*1.2 srate_axis['min']=0 srate_axis['gap']=srate_maxv*1.2/10 out={} out['ctr_title']=ctr_title out['ctr_axis']=ctr_axis out['ctr_series']=ctr_vals out['srate_title']=srate_title out['srate_axis']=srate_axis out['srate_series']=srate_vals out['times']=times out['ret']=202 return json.dumps(out,indent=4,sort_keys=True) #---------------------------------------------------------------------- def getModel(name,data): model={ 'type':'line', 'markPoint': {'data': [{'type': 'max', 'name': '最大值'},{'type': 'min', 'name': '最小值','symbol':'arrow'},{'type': 'average', 'name': '平均值'},] } } model['name']=name model['data']=data return model
数据库模型
from page import db #table1 class HourStatic(db.Model): #指定数据库名 __tablename__ = 'tb_hour_reason_static' #一定要按照数据库各字段定义的顺序 ip= db.Column(db.String(32), index=True,primary_key=True) reason=db.Column(db.String(64), index=True,primary_key=True) static_time=db.Column(db.DateTime, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,ip,reason,static_time,shownum,clicknum): self.ip=ip self.reason=reason self.static_time=static_time self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<HourStatic ip:%s reason:%s time:%s>'%(self.ip,self.reason,self.static_time) #table2 class DayStatic(db.Model): __tablename__='v_day_reason_static' ip=db.Column(db.String(32), index=True,primary_key=True) reason=db.Column(db.String(64), index=True,primary_key=True) static_date=db.Column(db.Date, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,ip,reason,static_date,shownum,clicknum): self.ip=ip self.reason=reason self.static_date=static_date self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<DayStatic ip:%s reason:%s date:%s>'%(self.ip,self.reason,self.static_date) #table3 class RHourStatic(db.Model): __tablename__ = 'tb_hour_allip_reason_static' reason=db.Column(db.String(64), index=True,primary_key=True) static_time=db.Column(db.DateTime, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,reason,static_time,shownum,clicknum): self.reason=reason self.static_time=static_time self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<RHourStatic reason:%s time:%s>'%(self.reason,self.static_time) #table4 class RDayStatic(db.Model): __tablename__='v_day_allip_reason_static' reason=db.Column(db.String(64), index=True,primary_key=True) static_date=db.Column(db.Date, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,reason,static_date,shownum,clicknum): self.reason=reason self.static_date=static_date self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<RDayStatic reason:%s date:%s>'%(self.reason,self.static_date) #table5 class WholeStatic(db.Model): __tablename__='tb_day_whole_static' static_date=db.Column(db.Date, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(tatic_date,shownum,clicknum): self.static_date=static_date self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<WholeStatic date:%s>'%(self.static_date) #view1 class HourWholeStatic(db.Model): __tablename__ = 'v_hour_allreason_static' ip=db.Column(db.String(32), index=True,primary_key=True) static_time=db.Column(db.DateTime, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,ip,static_time,shownum,clicknum): self.ip=ip self.static_time=static_time self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<HourWholeStatic ip:%s time:%s>'%(self.ip,self.static_time) #view2 class DayWholeStatic(db.Model): __tablename__='v_day_allreason_static' ip=db.Column(db.String(32), index=True,primary_key=True) static_date=db.Column(db.Date, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,ip,static_date,shownum,clicknum): self.ip=ip self.static_date=static_date self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<DayWholeStatic ip:%s date:%s>'%(self.ip,self.static_date) #view3 class RHourWholeStatic(db.Model): __tablename__ = 'v_hour_allip_allreason_static' static_time=db.Column(db.DateTime, index=True,primary_key=True) shownum=db.Column(db.BigInteger, nullable=False) clicknum= db.Column(db.BigInteger, nullable=False) def __init__(self,static_time,shownum,clicknum): self.static_time=static_time self.shownum=shownum self.clicknum=clicknum #---------------------------------------------------------------------- def __repr__(self): """""" return '<RHourWholeStatic time:%s>'%(self.static_time) if __name__ == "__main__": db.create_all()
manage.py
#!/usr/bin/python # encoding=utf-8 from flask.ext.script import Manager from page.page import app manager = Manager(app) app.config['DEBUG'] = True if __name__ == '__main__': manager.run()
数据库查询总结
1.查询指定字段,条件为某个字段多个值,并分组累计,结果排序:
#!/usr/bin/python # encoding=utf-8 from flask.ext.sqlalchemy import SQLAlchemy import sqlalchemy #查询语句: ips=["10.60.147.166", "10.60.147.167", "10.60.148.205", "10.60.148.5", "10.60.148.6", "10.60.148.71", "10.60.149.137", "10.60.149.158", "10.60.149.224", "10.60.149.225", "10.60.149.30", "10.60.150.170", "10.60.150.32", "10.60.151.92"] qres1=db.session.query(HourStatic.static_time,sqlalchemy.sql.func.sum(HourStatic.shownum),sqlalchemy.sql.func.sum(HourStatic.clicknum)).filter(HourStatic.ip.in_(ips),HourStatic.reason==args[1],HourStatic.static_time.between(args[2],args[3])).group_by(HourStatic.static_time).order_by(sqlalchemy.asc(HourStatic.static_time)).all() qres2=db.session.query(HourWholeStatic.static_time,sqlalchemy.sql.func.sum(HourWholeStatic.shownum)).filter(HourWholeStatic.ip.in_(ips),HourWholeStatic.static_time.between(args[2],args[3])).group_by(HourWholeStatic.static_time).group_by(HourWholeStatic.static_time).order_by(sqlalchemy.asc(HourWholeStatic.static_time)).all() #访问结果方法: if (qres1 is not None) and (qres2 is not None): tdict={} for it in qres2: tdict[it[0]]=it[1] for it1 in qres1: if tdict.has_key(it1[0]): shows.append(long(it1[1])) clicks.append(long(it1[2])) ctr.append(float(it1[2])/float(it1[1])) srate.append(float(it1[1])/float(tdict[it1[0]])) times.append(it1[0].strftime(time_format[tp]))
2.执行mysql语句:
import sqlalchemy engine = sqlalchemy.create_engine('mysql://root:root@10.240.123.104:3306/db_news_news_report?charset=utf8', echo=True) DB_Session =sqlalchemy.orm.sessionmaker(bind=engine) conn = DB_Session() items=conn.execute("select DATE_FORMAT(static_date,'%%Y%%u') week,sum(shownum) as shownum,sum(clicknum) as clicknum from tb_day_whole_static where static_date>='%s' and static_date<='%s' group by week;"%(args[0],args[1])).fetchall() if items is not None: for it1 in items: shows.append(long(it1[1])) clicks.append(long(it1[2])) ctr.append(float(it1[2])/float(it1[1])) if tp in time_format.keys(): times.append(it1[0].strftime(time_format[tp])) else: times.append(it1[0]) if isinstance(items, sqlalchemy.engine.result.ResultProxy): items.close()
相关文章推荐
- xml应用以及从数据库读出数据形成XML,XML的查询,xpath
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —查询单条记录、修改
- Python Web 9 —— flask中在js中如何解析render_template传递给html的数据
- python读取文本数据写入到数据库及查询优化
- docker(7):使用python 连接数据库,插入并查询数据--link
- 基于SQL和PYTHON的数据库数据查询select语句
- JAVA WEB开发从数据库中查询到的数据用list怎么在JSP页面整齐的显示出来,请写代码,
- 初识docker—创建WEB应用容器1python+flask
- Flask中数据库查询数据的简要概括
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
- MODIS数据的简介和下载(番外篇)——MODIS Web Service的Python客户端应用
- WEB应用中缓存数据库数据(Oracle)
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- Excel在统计分析中的应用—第三章—数据库统计函数与数据透视表-Part1-(数据查询与筛选、分类汇总)
- python数据库sqlite基础(一)-------数据库创建,表的建立,数据录入,数据查询
- 关于Python对简单的web框架flask的应用使得不只是本机而是局域网都能访问
- python 查询数据库数据 NoneType报错
- Python脚本之django---mysql-记录主机性能数据到数据库-web站点管理数据库及web显示命令执行结果
- Python Flask Web 第十一课 —— 使用 Flask-SQLAlchemy 管理数据库
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —添加查询