2016-08-18 5 views
0

http取得要求を介してviews.pyに文字列を送信してからjavascriptに戻しますが、目的のデータが取得されず、代わりに空が表示されますdict。私もDjango 1.8を使っています。JSON空の辞書を返す未処理のSQLクエリのダンプ

views.py:

def getData(request): 
    some_data = request.GET.get('selectionvalue') 
    cursor = connection.cursor() 
    cursor.execute("SELECT SW_ID FROM sw WHERE SWName = %s ", [some_data]) 
    row = cursor.fetchall() 
    return JsonResponse({"Item" : list(row)}) 
    #return JsonResponse({"Hello" : "world"}) works. 

私は過去数時間のために、この問題に引っかかってきたし、任意の助けを大好きです。ありがとうございました。 UPDATE

def getData(request): 
    some_data = request.GET.get('selectionvalue') 
    cursor = connection.cursor() 
    cursor.execute("SELECT SW_ID FROM sw WHERE SWName = %s ", [some_data]) 
    row = cursor.fetchall() 
    data = {"Item" : row} 
    return JsonResponse(data) 

が、私はこれを試していないが、それでも運

を私は今、私はもともと文字列にいたクエリ辞書を変換しました。私は今、クエリ内でその文字列変数を使用しようとしていますが、動作していません。変数を持たない別のクエリの場合は、完全に動作します。私はこれを理解できないようです。

答えて

0

ちょっと遊んだ後、ついにそれを修正しました。私の問題は、データベースのテーブルとカラムのいずれかで正確な文字列名を検索する必要があることでしたが、私は送信されたデータをクエリ辞書としてviews.pyで取得していました。このクエリ辞書には、値ではなく辞書のキーとして要求を渡した単一の文字列が含まれています。だから、私はそれを単一の文字列変数に変換し、次に私のクエリを使用する必要がありました。私はまた、クエリの中に私の%sの周りに ''を持たないようにする必要がありました。

Views.py:

def getData(request): 
    some_data = request.GET 
    for key in some_data: 
     SWVALUE = key 
    cursor = connection.cursor() 
    cursor.execute("SELECT SW_ID FROM sw WHERE SWName = %s ", (SWVALUE)) 
    = %s ", %ItemfromSW) 
    row = cursor.fetchall() 
    json_data = json.dumps(list(row)) 
    return HttpResponse(json_data, content_type = "application/json") 
1

は、あなたが "行" の変数を印刷しようとしたことがありますか?結果はありますか? これはクエリの問題ではないかもしれないが、問題は行データがjsonシリアライズ可能でないため、JsonResponseがそれをレンダリングできないということです。

i。つまり、cursor.fetchall()は、タプルのリストを返すので、[(1、)、(5、)、(7、)]の形式でデータを配信すると信じています。そして、あなたがlist(行)を呼び出すとき、応答は同じです(タプルのリストは既にリストです)。

念のために、これを試してみてください。

def getData(request): 
    some_data = request.GET.get('selectionvalue') 
    cursor = connection.cursor() 
    cursor.execute("SELECT SW_ID FROM sw WHERE SWName = %s ", [some_data]) 
    row = cursor.fetchall() 

    items = [] 
    for r in row: 
     items.append(r[0]) 

    return JsonResponse({"Item" : items}) 
関連する問題