目的是做一个报表,之前考虑直接用python,后面考虑到需要共享以及及时查看,所以考虑WEB。
要求不是特别高,就使用FLASK框架,轻量级,简单使用很快就能上手。
开发环境pycharm
直接用pycharm新建一个flask项目,不用去安装flask相关包。
flask 目录
static?所有静态文件目录 templates?HTML模板目录 app.py? sqlserver_cn?自己写的连接sqlserver的包?里面的MyDB模块实现连接sqlserver的方法?避免每次调用要创建连接和游标
MyDB.py
import?pymssql class?MyDb: ????"""以面向对象方式封装数据库和数据库连接""" ????server?=?‘192.168.0.66‘??#?端口在init函数中直接1433初始化了,可以自己适当改变 ????database?=?‘AIS20190622100041‘ ????username?=?‘sa‘ ????password?=?‘123456‘ ????cur?=?None ????def?__init__(self): ????????#?获取数据库连接和游标 ????????self.conn??=?pymssql.connect(self.server,?self.username,?self.password,?self.database)?#服务器名,账户,密码,数据库名 ????????self.cur?=?self.conn.cursor() ????def?select_db(self,?sql_code): ????????#?查询sql数据 ????????self.cur.execute(sql_code) ????????return?self.cur.fetchone() ????def?__del__(self): ????????#?对象销毁,断开连接 ????????self.cur.close()
index.html
<!DOCTYPE?html> <html> <head> ????<meta?charset="utf-8"> ????<title>第一个?ECharts?实例</title> ????<!--?引入?echarts.js?--> ????<script?src="static/echarts.min.js"></script> </head> <body> <!--?为ECharts准备一个具备大小(宽高)的Dom?--> <div?id="main"?style="width:?1000px;height:?1000px"> </div> <script?type="text/javascript"> ????//?基于准备好的dom,初始化echarts实例 ????var?myChart?=?echarts.init(document.getElementById(‘main‘),?‘dark‘); ????myChart.setOption({ ????????tooltip:?{ ????????????trigger:?‘item‘ ????????}, ????????title:?{ ????????????text:?"客户合同数TOP10", ????????????x:?‘center‘, ????????????y:?‘bottom‘, ????????}, ????????series:?[ ????????????{ ????????????????name:?‘合同数量‘, ????????????????type:?‘pie‘,????//?设置图表类型为饼图 ????????????????radius:?‘50%‘,??//?饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的?55%?长度。 ????????????????label:?{normal:?{show:?true,?position:?‘outer‘,?formatter:?"{b}:?{c}({d}%)"}}, ????????????????data:{{?my_data|safe}} ????????????} ????????] ????}) </script> </body> </html>
app.py
import?json from?random?import?random from?gevent?import?pywsgi from?sqlserver_cn?import?MyDB from?flask?import?Flask,?render_template app?=?Flask(__name__) #?路由 @app.route(‘/‘) #处理函数 def?hello_world(): ????sql?=?"select?top?10?客户名,count(*)?from?合同表?group?by?客户名?order?by?count(*)?desc" ????mydb?=?MyDB.MyDb() ????row?=?mydb.select_db(sql) ????list?=?[] ????while?row: ????????rs?=?{"value":row[1],"name":row[0]}?#?输出结果 ????????row?=?mydb.cur.fetchone() ????????list.append(rs) ????myjson?=?json.dumps(list)?#列表转成json? ????print(myjson) ????#?返回值到模板文件,模板文件根据返回值返回界面给浏览器 ????return?render_template(‘index.html‘,my_data?=myjson) if?__name__?==?‘__main__‘: ????server?=?pywsgi.WSGIServer((‘0.0.0.0‘,?5000),?app) ????server.serve_forever()
启动flask项目 --host=0.0.0.0 指定监听所有网卡,如果不指定只监听127.0.0.1 外网无法访问
python -m flask run? --host=0.0.0.0