2016-08-19 36 views
0

我有近1亿个产品名称出现在DB中。我每次在UI中显示100个产品。&滚动显示接下来的100 &等等。为此,我使用Django RawQuery作为我的数据库(mysql)不支持截然不同的功能Django + python:使用Order to Django RawQuery对象?

这里“取”是otherfile使用的回调函数:

def fetch(query_string, *query_args):   

       conn = connections['databaseName'] 
       with conn.cursor() as cursor: 
       cursor.execute(query_string, query_args) 
       record = dictfetchall(cursor) 
       return record 

这里是views.py 所以样品原料查询代码段的主要电话:

record= fetch("select productname from abc") 

在这里,如果我将分类标准应用于记录

record= fetch("select productname from abc orderby name ASC") 

对于desc也结束了。因此,显示分拣产品需要很长时间。

我想要的就像我将查询1次&将存储在一个python对象,然后将开始申请升序或降序。

因此,当它第一次加载时,需要一些时间,但是随后应用排序标准,它将不会去数据库,以在每次排序结束时应用排序。

在整理记录的情况下,总想说增加性能。

+0

http://stackoverflow.com/questions/4183506/python-list-sort-in-descending-order –

+0

@UsmanMaqbool你是正确的。我是这样做的 – Sandy

回答

0

下面是我尝试排序我得到了期望的答案。

我从数据库中取数据&以字典数组的形式存储在一个列表中。

假设存储格式在一个列表中的数据:

l = [{'productName'='soap',id=1},{'productName'='Laptop',id=2}] 

下面的代码片断是排序后键dependening溶液:

from operator import itemgetter 

为升序

res= sorted(l, key=itemgetter('name')) 

降序

res= sorted(l, key=itemgetter('name'),reverse=True) 
1

我认为你要找的是pagination。当您想要批量显示数据(页面)时,这是一项基本技术。

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 

def listing(request): 
    query_string = 'your query' 
    query_args = [] 
    conn = connections['databaseName'] 
    with conn.cursor() as cursor: 
    cursor.execute(query_string, *query_args) 
    all_records = dictfetchall(cursor) 
    paginator = Paginator(all_records, 100) # Show 100 records per page 

    page = request.GET.get('page') 
    try: 
     records = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     records = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     records = paginator.page(paginator.num_pages) 

    return records 

无论何时您提出请求,您都应该在url参数中包含要显示的页面(例如1,2,3 ...)。

范例中得到http://localhost/products/?page=1

在逻辑上,您的JavaScript应显示第一页,并有保存下一个页面,您应该请求,用户滚动后反让一个AJAX请求得到第二页,增加页面计数器,等...

编辑:至于排序无论你也可以使用JavaScript将数据