2016-01-11 18 views
5

Sto cercando di recuperare le righe di una tabella utilizzando la libreria pyobc in Python.Le righe restituite da pyodbc non sono serializzabili JSON

Sono riuscito a recuperare correttamente le tabelle e i campi di una tabella. Ora ho una tabella denominata "apx_roomtypes" con i dati come segue,

enter image description here

Tuttavia, quando ho aggiungere le righe pyodbc a una lista e poi cerco di dumping l'elenco per JSON ho l'errore

TypeError: (1, 'Standard', 'For 5 members', 123) is not JSON serializable

Ecco il codice python :

class execute_query: 
    def GET(self,r): 
      web.header('Access-Control-Allow-Origin',  '*') 
      web.header('Access-Control-Allow-Credentials', 'true') 
      cnxn = pyodbc.connect(connection_string) 
      data = [] 
      cursor = cnxn.cursor() 
      query = web.input().query 
      cursor.execute(query) 
      rows = cursor.fetchall() 
      for row in rows: 
       data.append(row) 
      return json.dumps(data) 

come posso risolvere questo errore?

risposta

9

Quando si itera su rows, ogni row è un'istanza e non uno list. È possibile convertirlo in un elenco (che è JSON serializzabile) come segue:

rows = cursor.fetchall() 
for row in rows: 
    data.append([x for x in row]) # or simply data.append(list(row)) 

Se si desidera restituire un dizionario di coppie chiave/valore, invece di un elenco di valori poi prendere un look at this answer.

+0

Grazie per il collegamento bro, questo è quello che mi serviva – Sajeetharan

+1

'lista (riga)' dovrebbe fare il trucco senza l'espressione del generatore. – kindall

+0

Thx @kindall - applicato. –

Problemi correlati