• 大作业 数据清洗(清洗结果的展示与导出)


    点击结果查看并导出即可查看清洗后的结果,清洗后数据会先保存到数据库中,然后可以通过穿梭框将要导出的属性列导出为excel

    文件导出利用是原先的原始表数据导出,与之前的原理一摸一样,保存到数据库也与最一开始的文件上传并导入到数据库原理一样

    #清洗数据存入数据库
    def data_clean_save(data_clean,table_name,database_name):
        flag=1
        conn,cursor=get_conn_mysql_name(database_name)
        sql="DROP TABLE if EXISTS "+table_name+" ; "
        cursor.execute(sql)
        #判断表是否存在,存在就删除
        sql = " CREATE TABLE " + table_name + " ("
        key_0=data_clean.keys()
        key=""
        for i in key_0:
            key=key+","+i
        key=key[1:]
        j = 0
        for i in key_0:
            sql = sql + i + " TEXT  comment 'null,null',"
            j = j + 1;
        creat_sql = sql[0:-1] + ") ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;"
        print(creat_sql)
        # 获取%s
        s = ','.join(['%s' for _ in range(len(data_clean.columns))])
        # 获取values
        values = []
        for i in data_clean.values.tolist():
            values.append(i)
            # 组装insert语句
        insert_sql = 'insert into {}({}) values({})'.format(table_name, key, s)
        print(insert_sql)
        try:
            cursor.execute(creat_sql)
        except:
            traceback.print_exc()
            flag = 0
            print("表创建失败")
        # # 插入数据
        try:
            for i in values:
                cursor.execute(insert_sql, i)
                print(insert_sql)
                print(i)
            conn.commit()
        except:
            traceback.print_exc()
            flag = 0
            print("写入错误")
        close_conn_mysql(cursor, conn)
        return flag
        pass
    #查看最终结果,将结果保存到数据库的bigwork_update_data
    @app.route('/get_data_clean_result')
    def get_data_clean_result():
    table_name = request.values.get("table_name")
    table_name=table_name+"_clean"
    num_0 = data_clean.shape[0]
    num_1 = data_clean.shape[1]
    data = []
    flag=0
    #存入数据库
    code=dataclean.data_clean_save(data_clean,table_name,"bigwork_update_data")
    #将数据转换为json
    for i in range(num_0):
    json_list = {}
    for j in range(num_1):
    json_list[data_clean.keys()[j]] = data_clean.values[i][j]
    data.append(json_list)
    flag=flag+1
    return jsonify({"code": 0, "msg": code, "count": flag, "data": data})
    <!-- 内容主体区域 -->
            <blockquote class="layui-elem-quote layui-text">
                <h2>数据清洗:{{ table_name }}</h2>
                <h4 style="color: chocolate">已导入到数据库,表名:{{ table_name }}_clean</h4>
            </blockquote>
            <div style="padding: 15px;">
                <table id="demo" lay-filter="test"></table>
            </div>
            <blockquote class="layui-elem-quote layui-text">
                <h2>文件导出</h2>
            </blockquote>
            <div id="export_select" class="demo-transfer"></div>
            <br>
            <form class="layui-form" action="">
                <button type="button" class="layui-btn" id="export" >开始导出</button>
            </form>
            <br>
            <br>
            <br>
    <script>
    //JS
        data_key=[]
        data_key_select=[]
        layui.use(['element', 'layer', 'util'], function(){
            var element = layui.element
            ,layer = layui.layer
            ,util = layui.util
            ,$ = layui.$;
    
            //头部事件
            util.event('lay-header-event', {
            //左侧菜单事件
                menuLeft: function(othis){
                    layer.msg('展开左侧菜单的操作', {icon: 0});
                }
                ,menuRight: function(){
                    layer.open({
                        type: 1
                        ,content: '<div style="padding: 15px;">处理右侧面板的操作</div>'
                        ,area: ['260px', '100%']
                        ,offset: 'rt' //右上角
                        ,anim: 5
                        ,shadeClose: true
    
                    });
                }
            });
    
        });
        layui.use('table', function(){
            var table = layui.table
            //第一个ajax获取表的详细数据以及重复值
            $.ajax({
                 type: "GET",
                 url: "/get_clean_result_key?table_name={{ table_name }}&database_name={{ database_name }}",
                 dataType: "json",
                 success: function(data){
                     for (i=0;i<data.len;i++){
                         data_key[i]={field:data.data[i],title:data.data[i],120}
                     }
                     // 设置key值
                     table.render({
                         elem: '#demo'//以此来区分不同的表格
                         ,height: 430
                         ,url: '/get_data_clean_result?table_name={{ table_name }}&database_name={{ database_name }}' //数据接口
                         ,page: false //开启分页
                         ,cols: [data_key]
                     });
                 }
             });
            //获取缺省值信息
        });
        layui.use(['transfer', 'layer', 'util'], function(){
            var $ = layui.$
            ,transfer = layui.transfer
            ,layer = layui.layer
            ,util = layui.util;
            //获取穿梭框的值
            $.ajax({
                 type: "GET",
                 url: "/get_clean_result_key?table_name={{ table_name }}&database_name={{ database_name }}",
                 dataType: "json",
                 success: function(data){
                     for (i=0;i<data.len;i++){
                         data_key_select[i]={value:data.data[i], title: data.data[i], disabled: "", checked: ""}
                     }
                     //定义标题及数据源
                     transfer.render({
                        elem: '#export_select'
                        ,title: ['属性列', '导出列']  //自定义标题
                        ,data: data_key_select
                        //, 150 //定义宽度
                        ,height: 450 //定义高度
                        ,id: 'export_select_data'
                     })
                 }
             });
            $('#export').click(function(){
                //url="http://127.0.0.1:5000/export?table_name={{ table_name }}&database_name={{ database_name }}"
                //window.open(url)
                var getData = transfer.getData('export_select_data');
                //将数据进行拼接
                var str=""
                for(i=0;i<getData.length;i++){
                    str=str+getData[i].value+","
                }
                $.ajax({
                    type: "GET",
                    url: "/export_select",
                    data:{getData_str:str,table_name:"{{table_name}}_clean",database_name:"bigwork_update_data"},
                    dataType: "json",
                    success: function(data){
                        if(data.flag==1){
                            window.open("http://127.0.0.1:5000/export_select_download?table_name={{ table_name }}_clean")
                        }else if(data.flag==0){
                            alert("导出失败")
                        }
                    }
                });
            });
        });
    </script>
  • 相关阅读:
    网络配置
    mysql和mongodb的区别
    HTTP和HTTPS
    网络架构/结构
    SKU和SPU表的设计
    第三方-FastDFS分布式文件系统
    并发和并行
    多任务-线程、进程、协程的一些见解
    多任务-协程
    多任务-协程之生成器
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15685272.html
Copyright © 2020-2023  润新知