2016-08-19 5 views
0

DBには約1億の製品名があります。スクロールしたあと、&の度に100個の製品をUIに表示しています。次は100 &です。このため私のデータベース(mysql)は異なる機能をサポートしていないので、Django RawQueryを使用しました。私があればここでDjango + python:Django RawQueryオブジェクトにOrder byを使用しますか?

record= fetch("select productname from abc") 

:ここ

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 ので、サンプルの生のクエリのコードスニペットの主な呼び出しです:ここでは

「フェッチ」はotherfileで使用されるコールバック関数ですレコードにソート基準を適用する予定

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

同じことを行うために終了する。結果として、ソートされた製品を表示するのに非常に時間がかかる。

私が欲しいのは、&がpythonオブジェクトに格納され、昇順または降順の適用を開始する1回のクエリです。

最初にロードするときに時間がかかるが、ソート基準を適用すると、ソートが実行されるたびにソートが適用されるためデータベースには移動しない。

レコードをソートする際のパフォーマンスの向上が言いたいことがあります。

+0

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

+0

@UsmanMaqboolあなたは正しいです。私は自分のやり方でやった – Sandy

答えて

0

以下は、あなたのデータをソートするためにJavaScriptを使用することができますが、私の試みです&私は希望の答えを得ました。

データベースからデータを取得する&は辞書の配列形式でリストに格納されています。リスト内のデータ記憶されたフォーマットと仮定

:コードスニペット以下

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

キー時dependeningソートを解決する:

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

昇順ため

from operator import itemgetter 

降順の場合

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 

リクエストするたびに、表示するページ(例:1,2,3 ...)をURLパラメータに含める必要があります。 http://localhost/products/?page=1ロジックの面では

は、最初のページを表示し、ユーザーがスクロールした後、あなたが要求する必要があり、次のページを保持するカウンタを持っている必要があり、あなたのjavascriptのは、AJAX要求を取得する例を作るGET 2ページとページカウンタなどを向上させる...

EDIT:並べ替え問題についてはあなたも

関連する問題