• python进阶(一)关联sql的算法操作


      上次我们讲了一个很简单的python程序,这次我们复杂一点,通过python操作更加复杂点并配合具有更多算法功能的sql语句。

      首先,我们这个程序的功能为,通过python操作sql获取数据,并通过关联算法在服务器端对数据进行处理和筛选。然后返回前端,前端我们再用js通过ajax操作获取数据,并在前端再对数据进行二次处理。首先上一张效果图吧:

      

    这里顺带用了日期插件跟分页插件。好了,废话不多说,还是直接上代码:

    # -*- coding: utf-8 -*-
    #
    # Copyright (C) 2014 NetEase SDC
    #
    # Author: LIJIAN <gzlijian@corp.netease.com>
    # Version: 1.0 2014-03-18
    from django.shortcuts import render_to_response
    from authority.sys.sys_views import get_menu_name
    from base.utils.request_utils import get_str, get_int
    from base.utils import mysql_utils_psafe
    from django.http import HttpResponse
    from base.data.report_utils import get_menu_valid_time
    import datetime
    
    def query_libao_inter(request):
        u""" 
        """
        para = {}
        game_id = get_int(request,'game_id',None)
        para['game_id'] = game_id
        from base.utils.data_utils import get_dimen_info
        para['dimen_info'] = get_dimen_info([143])[143]
        para['valid_time'] = {'start':'20140430','end':str(datetime.datetime.now())[0:10].replace('-','')}
        template_name = '/specific/libao/query_libao.html'
        return render_to_response(template_name, para)
    
    def query_libao_use_data(request):
        game_id = get_int(request,'game_id',None)
        sn = get_str(request,'sn','')
        date_s = get_str(request,'date_s','')
        date_e = get_str(request,'date_e','')
        os = get_int(request,'os',None)
        page_conditions_str = get_str(request, 'page_conditions','')
            
        total_sql = """
            select  count(*)
            from report_ods.wscs_libao a left join info.game_host b on a.hostnum=b.id and b.game_id=%s 
        """%game_id
        sql = """
            select  user_id,sn,registertime,if(b.host_name,b.host_name,hostnum),if(is_trade=1,'是','否'),if(is_valid_user=1,'是','否'),total_trade_cash
            from report_ods.wscs_libao a left join info.game_host b on a.hostnum=b.id and b.game_id=%s 
        """%game_id
        where_sql = []
        if sn:
            where_sql.append("sn like '%%%s%%'"%sn)
        if date_s and date_e:
            where_sql.append("registertime between '%s-%s-%s 00:00:00' and '%s-%s-%s 23:59:59'"%(date_s[0:4],date_s[4:6],date_s[6:8],date_e[0:4],date_e[4:6],date_e[6:8]))
        if os:
            where_sql.append(' os_name=%s'%os)
        if where_sql:
            sql += 'where '+' and '.join(where_sql)
            total_sql += 'where '+' and '.join(where_sql)
        if page_conditions_str:
            import json
            page_conditions = json.loads(page_conditions_str)
            sql += ' limit %d,%d'%((int(page_conditions['cursor'])-1)*int(page_conditions['size']),page_conditions['size'])
        print sql
        data = mysql_utils_psafe.query_listlist(sql,value_decorator_list=str)
        total_num = mysql_utils_psafe.query_one(total_sql)
        return {'data':data,'total_num':total_num}
    
    
    def file_os(request):
        data = query_libao_use_data(request)['data']
        response = None
        try:
            content=["xEFxBBxBF",'用户ID, 礼包码, 使用时间, 服务器, 是否新增, 是否充值, 充值额, 
    ']
            for line in data:
                content.append(','.join([str(x) for x in line])+'
    ')
            print data        
            response = HttpResponse(content, mimetype='application/octet-stream')
            response['Content-Disposition'] = 'attachment; filename=%s'%'礼包码.csv'
        except Exception,ex:
            print_error()
        finally:
            return response
        
        
        
        
        js代码:
    require(['jquery', 'pt', 'bootstrap','table', 'datepicker'], function() {
        var $ = require('jquery');
          var pt = require('pt');
          var table = require('table');
          var datepicker = require('datepicker');
          var day_s=$ns.report_valid_times['start'],day_e=$ns.report_valid_times['end'];
          $ns.settings = {"size":15,"cursor":1,"sortingStatus":[]};
          $(document).ready(function() {
              // 初始化
              // 数据条件
              $ns.data_conditions = {};
              // 分页条件
              $ns.table_conditions = {};
              $ns.player_list = [];
              
              //生成日期插件
              $ns.start_dp = new datepicker.Datepicker({
                datepicker : {
                    renderTo : 'query_date',
                    onpick : function(type, start, end) {
                        console.log(type, start, end, this);
                        day_s=start;
                        day_e=end;
                    }
                },
                datetype : {
                    onpick : function(type) {
                    }
                },
                date : {
                    day : {
                        start : day_s,
                        end : day_e,
                        initial:[-60]
                    }
                }
            });
            
            $("#search_btn").click();
          });
          
          
        //查询事件
        $("#search_btn").click(function(){
            query_libao_use_data();
        });
            
        function query_libao_use_data(){
            var sn = $("#sn").val();
            var os = $('#os').val();
            var para = new Object();
            var QUERY_URL = "/product_center/ajax_query/"; 
            para.query_type = "query_libao_use_data";
            para.date_s = day_s;
            para.date_e = day_e;
            para.game_id = $ns.game_id;
            para.sn = sn;
            para.os = os;
            para.page_conditions = JSON.stringify($ns.settings);
            para.random = Math.random();
            console.log(day_s)
            $.ajax({
                    type:'get',url:QUERY_URL,data:para,dataType:'json',async:false,
                    success:function(data){
                        $ns.total_num = data['total_num'];
                        for(var i in data['data']){
                            data['data'][i][2]=data['data'][i][2].replace(/T/," ");
                        }
                        tables([]);
                        $(".navbar").css("margin-bottom","0");
                    }, 
                    complete:function(){
                        
                    },error:function(){
                        tables([]);
                        alert('查询出错!');
                    }
            });
        }    
            
            
            //复制数据
            $("#download_data").click(function(){
                var para = new Object();
                var query_url = "/product_center/specific/download_libao/"; 
                query_url += '?date_s='+day_s;
                query_url += '&date_e='+day_e;
                query_url += '&game_id='+$ns.game_id;
                query_url += '&sn='+$("#sn").val();;
                query_url += '&os='+$("#os").val();;
                para.random = Math.random();
                window.open (query_url);
            });
            
        //加载表格
          function tables(item){
              $('.table').table({
                head : ['用户ID', '礼包码', '使用时间','服务器','是否新增','是否充值','充值额'],
                body : {
                       rows:item,
                       paging:{
                            enabled : true,
                              size : $ns.settings['size'],
                              availableSizes : [15,20,50],
                              totalNum : $ns.total_num,
                              action : function(settings, allrows, comparers, body) {
                                  $ns.settings = settings;
                                  var sn = $("#sn").val();
                                var os = $('#os').val();
                                var para = new Object();
                                var QUERY_URL = "/product_center/ajax_query/"; 
                                para.query_type = "query_libao_use_data";
                                para.date_s = day_s;
                                para.date_e = day_e;
                                para.game_id = $ns.game_id;
                                para.sn = sn;
                                para.os = os;
                                para.page_conditions = JSON.stringify($ns.settings);
                                para.random = Math.random();
                                $.ajax({
                                        type:'get',url:QUERY_URL,data:para,dataType:'json',async:false,
                                        success:function(data){
                                            $ns.total_num = data['total_num'];
                                            for(var i in data['data']){
                                                data['data'][i][2]=data['data'][i][2].replace(/T/," ");
                                            }
                                            item = data['data'];
                                        }, 
                                        complete:function(){
                                            
                                        },error:function(){
                                            return [];
                                        }
                                });
                                return item;
                              }
                       },
                }
            });
          }
    });
    
    

    html代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>礼包码使用情况</title>
    {% include "base/head_report.html" %}
    <link rel="stylesheet" href="/static/product_center/specific/libao/css/query_libao.css?v=1.0" type="text/css" />
    <script>
    var $ns = {};
    $ns.game_id = {{game_id|default:"''"}};
    $ns.report_valid_times = {{valid_time|safe|default:'{}'}};
    document.write('<script type="text/javascript" src="/static/product_center/specific/libao/js/query_libao.js?id='+Math.random()+'"></script>');//Math.random()
    </script>
    <script type="text/javascript" src="/static/base/js/util.js"></script>
    <script type="text/javascript" src="/static/base/js/filter.js"></script>
    </head>
    <body>
    <div>
    <div class="wrapper">
    <div class="row" style="">
    <div class="conditions">
    <div class="tips-options">
    <div id="query_date"></div>
    <div id="sel">
    <input type="text" class="search_text" id="sn" placeholder="输入礼包码查询" />
    <select class="input-mini" id="os">
    <option value="">---请选择操作系统---</option>
    {% for item in dimen_info %}
    <option value="{{item.id}}">{{item.name}}</option>
    {% endfor %}
    </select>
    <input type="button" class="btn" id="search_btn" value="查询" />
    <input type="button" class="btn-primary copy" id="download_data" value="下载数据"/>
    </div>
    </div>

    </div>
    </div>
    <div class="row" style="margin-bottom:20px;">
    <div class="span12" style="">

    <div>
    <table id="player_list"
    class="table table-condensed table-bordered table-fixed table-hover table-column-hover"
    style="border-radius: 0">


    </table>
    </div>
    </div>
    </div>

    </div>
    </div>
    </body>
    </html>

    
    
  • 相关阅读:
    WINNER队成立(第二天)
    新学期组队合作
    构建之法第8、9、10章
    第一阶段冲刺(第一天)
    作业六:小学生四则运算之NABCD模型与产品Backlog。
    构建之法第六章、第七章观后感
    四则运算,测试与封装。
    使用Webpack4 搭建React项目
    算法一小时--希尔排序
    算法一小时-插入排序
  • 原文地址:https://www.cnblogs.com/qianyongV/p/4268884.html
Copyright © 2020-2023  润新知