2009-05-02 5 views
0

毎月の販売価格のトップ5を取得したい毎年です。djangoでicontainsをSQL文に変換するにはどうすればいいですか?

だから私はこの

def query(request): 
    from django.db import connection 
    cursor = connection.cursor() 
    cursor.execute("SELECT product_style_id ,sum(price) As total_p ,sum(cast(amount as int)) AS total_a FROM jewelry_productorder group by product_style_id ORDER BY total_p DESC LIMIT 5 ") 
    output = cursor.fetchall() 
    variables = RequestContext (request, {'output':output,}) 
    return render_to_response('top5.html', variables) 

のようなコードで結果を置くには、各年の代わりに、毎月のトップ5のテーブル全体のトップ5を示す出てきました。

だから私は、結果が

オペレータが存在しないクエリ/でこの

ProgrammingErrorのように出てきた(WHERE句を追加することで)このようなコードで

def query(request): 
    m = request.GET['month'] 
    y = request.GET['year'] 
    d = str(y+'-'+m) 
    from django.db import connection 
    cursor = connection.cursor() 
    cursor.execute("SELECT product_style_id ,sum(price) As total_p ,sum(cast(amount as int)) AS total_a FROM jewelry_productorder WHERE due_date LIKE %s group by product_style_id ORDER BY total_p DESC LIMIT 5 " ,[d]) 
    output = cursor.fetchall() 
    variables = RequestContext (request, {'output':output,}) 
    return render_to_response('top5.html', variables) 

を置く:日付~~不明 LINE 1:... total_a FROM jewelry_productorder where due_date LIKE E'200 ... ^ ヒント:指定された名前と引数の型に一致する演算子がありません。明示的な型キャストを追加する必要があるかもしれません。

お願いします。どうすればいいですか?

+0

どのデータベースをお使いですか? – ibz

答えて

2

Djangoの__icontainsは、ILIKEを使用してSQLで記述できます。

例:

SELECT ... WHERE some_column ILIKE '%some_string%' 

ですから、のようなクエリを書き直すことができます(私の答えにコメントで指摘したように)あなたのDBはILIKEをサポートしていない場合

cursor.execute("SELECT product_style_id ,sum(price) As total_p ,sum(cast(amount as int)) AS total_a FROM jewelry_productorder WHERE due_date ILIKE %s group by product_style_id ORDER BY total_p DESC LIMIT 5", ["%%%s%%" % d]) 

、何かをします

SELECT ... WHERE LOWER(some_column) LIKE LOWER('%some_string%') 

LOWERを使用すると、DBがインデックスを使用できなくなる可能性があります(インデックスがある場合その列に)。

また、Django 1.1には集約のサポートが追加されているため、未処理のSQLに頼らずにGROUP BYクエリを作成できるはずです。これを確認してください:http://docs.djangoproject.com/en/dev/topics/db/aggregation/

+1

ILIKEは一部のデータベースでは使用できません。 –

関連する問題