2016-08-19 23 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將數據