2017-07-21 6 views
1

私はデータベースからデータを取り出し、JSON形式に変換してJSON応答を返すメソッドを作成しました。Python ValueError: '辞書更新シーケンス要素#0の長さは4です。 2が必要です '

def getEchoResource(self): 
     try: 
      row = self.cursor.execute("SELECT * FROM echo_resource_log WHERE DATE(last_update) = CURDATE();") 
      if row: 
       response = app.response_class(response=json.dumps(dict(self.cursor.fetchall())), status=200, mimetype='application/json') 
       return response 
     except MySQLdb.Error as e: 
      logger.error("Error %d: %s" % (e.args[0],e.args[1])) 
     except Exception, e: 
      logger.error("Error : ", str(e)) 

方法は、このエラーメッセージスロー - とValueError:「辞書更新シーケンス要素#0は長さ4を有します。 2が必要とされる」

トレース -

>/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/ 
updateEchoResource.py(123)getEchoResource() 
-> row = self.cursor.execute("SELECT * FROM echo_resource_log WHERE 
    DATE(last_update) = CURDATE();") 
(Pdb) n 
>/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/ 
    updateEchoResource.py(124)getEchoResource() 
-> if row: 
(Pdb) n 
>/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/ 
    updateEchoResource.py(125)getEchoResource() 
-> response = 
    app.response_class(response=json.dumps(dict(self.cursor.fetchall())), 
    status=200, mimetype='application/json') 
(Pdb) n 
    ValueError: 'dictionary update sequence element #0 has length 4; 2 is 
    required' 
>/app/worker/echo/apps/opsware_flask_rest_app/opsware_flask_rest_app/ 
    updateEchoResource.py(125)getEchoResource() 

行が返さ -

('n3pvap168', 'X2Linux_NSS', 'Contact does not exist in Contacts table', datetime.datetime(2017, 7, 21, 4, 27, 37)) 
+1

正確なエラートレースを確認できますか? –

+0

@Wintro元の質問にトレースを追加しました。 –

+0

「カーソル」からレコードを1つ取り出して印刷して、私たちに見せることはできますか? –

答えて

2

A Pythonの辞書をあなたはおそらく、キーと値のペアの順不同の集合である知っています。したがって、辞書の各エントリは、1つのキーと1つの値を持たなければなりません。ここで起こっていることは、あなたの行に示されているように、4つのオブジェクトのシーケンスを辞書に変換しようとしていることです(したがって、エラーが予想される長さ2、長さが4です)。

これを修正するには、4-lengthデータ構造を2-lengthデータ構造に変換する必要があります。これは、長さ2の配列を作成し、配列の0インデックスと1インデックスの残りの行にキーとして使用する文字列を格納することによって実行できます。スライシングを使用してこれを達成できるかもしれません。

関連する問題