PythonStock(6):使用 dataTable+python+Tornado 实现服务端多字段查询

41 篇文章 314 订阅
30 篇文章 151 订阅

前言


使用Python开发一个股票项目。
项目地址:
https://github.com/pythonstock/stock
相关资料:
http://blog.csdn.net/freewebsys/article/category/7076584
主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78031100未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,使用DataTable查询数据


参考文档:
https://datatables.net/examples/api/regex.html

之前几篇已经把DataTable都弄明白了。
现在要把最后的一个数据查询弄好。可以将字段进行filter查询。

2,增加filter查询


开启filter插件:

    "bFilter": true,

但是页面上多两个查询输入框,不好看了。

<style>
    #dynamic-table_filter {display: none;}
</style>

不显示就行了。然后循环显示:

    <div class="row">
        {% for index,element in enumerate(stockWeb.columns) %}
        <div class="col-md-4" id="filter_col{{ index+1 }}" data-column="{{ index }}">
            {{ stockWeb.column_names[index] }} &nbsp;
            <!-- Column - {{ stockWeb.column_names[index] }} - {{ element }} -->
            <input type="text" class="column_filter input-group-sm form-control" id="col{{ index }}_filter">
        </div>
        {% end %}
    </div>

使用tornado的模板显示所有的输入字段。
增加按钮点击事件:

$('input.column_filter').on( 'keyup click', function () {
    var i =  $(this).parents('div').attr('data-column') ;
    console.log(i,"val:",$(this).val());
    myTable.column(i).search(
        $(this).val()
    ).draw();
});

使用dataTable的search方法,这个方法可以记住之前输入的字段。
并不用每次都循环全部的input。在设计上就已经存储了其他字段的数据。

在后台处理:

search_by_column = []
search_by_data = []

# 返回search字段。
for item, val in self.request.arguments.items():
    # logging.info("item: %s, val: %s" % (item, val))
    if str(item).startswith("columns[") and str(item).endswith("[search][value]"):
        logging.info("item: %s, val: %s" % (item, val))
        str_idx = item.replace("columns[", "").replace("][search][value]", "")
        int_idx = int(str_idx)
        # 找到字符串
        str_val = val[0].decode("utf-8")
        if str_val != "":  # 字符串。
            search_by_column.append(stock_web.columns[int_idx])
            search_by_data.append(val[0].decode("utf-8"))  # bytes转换字符串

# 打印日志。
search_sql = ""
search_idx = 0
logging.info(search_by_column)
logging.info(search_by_data)
for item in search_by_column:
    val = search_by_data[search_idx]
    logging.info("idx: %s, column: %s, value: %s " % (search_idx, item, val))
    # 查询sql
    if search_idx == 0:
        search_sql = " WHERE %s = '%s' " % (item, val)
    else:
        search_sql = search_sql + " AND %s = '%s' " % (item, val)
    search_idx = search_idx + 1

在数据中返回样式:

item: columns[0][search][value], val: [b'1989-02-01']
item: columns[1][search][value], val: [b'']
item: columns[2][search][value], val: [b'']

3,显示效果


这里写图片描述
按照每个数据表生成查询

查询出匹配日期的数据
这里写图片描述
支持多个字段进行精确查询

4,总结


目前dataTable 的功能研究就算是告一段落了。
该研究的都研究明白了。可以成为一个完整的数据报表了。
有查询,排序,分页。对与股票数据的基本操作够用了。
dataTable 是一个做报表展示的丰富的类库,有很多插件。
使用起来也非常的方便。

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78031100 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值