python FLASK+SQLSERVER+ECHARTS 实践_Python

目的是做一个报表,之前考虑直接用python,后面考虑到需要共享以及及时查看,所以考虑WEB。

要求不是特别高,就使用FLASK框架,轻量级,简单使用很快就能上手。

开发环境pycharm

直接用pycharm新建一个flask项目,不用去安装flask相关包。

python FLASK+SQLSERVER+ECHARTS 实践_Python_02

flask 目录

python FLASK+SQLSERVER+ECHARTS 实践_Python_03

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