2012-03-05 10 views
5

Ultimamente ho cercato di recuperare qualcosa da un db e mi ha restituito un oggetto "Archiviazione". un codice che sto usando per chiamare la mia informazioni è:database web.py selezionare l'accesso

db = web.database(dbn='sqlite', db='sqlfile.sqlite') 
sely = db.select('carp', order="id ASC") 

quando sely corre mi cade il testo in questo modo:

<Storage {'lvl': 0, 'symbol': u'formb', 'logged': u'false', 'id': 1, 'display': u'Classic'}>

quando si stampa fuori sely la linea di archiviazione viene fuori. come posso ottenere il dizionario da questo oggetto?

risposta

4

Un trucco generale Python per gestire le API sconosciute consiste nell'utilizzare lo dir builtin. Prova dir(sely) nell'interprete per vedere quali variabili membro e funzioni sono definite per l'oggetto che ottieni.

  • Se vedete qualcosa come __iter__, è possibile chiamare list(sely) per convertire i risultati in una lista, e in generale iterare l'oggetto in un ciclo.
  • Se vedi qualcosa come __getitem__, allora puoi indicizzare l'oggetto e sperare di ottenere un valore.

Come nota a margine, ho appena provato il tuo codice e ottengo sely essere un web.utils.IterBetter esempio (che restituisce 0 righe, invece che prevede 3 nel mio caso). Quindi non riesco a riprodurre il tuo problema (ma ho dei problemi, per così dire).

+1

Grazie (sely) ha funzionato come volevo – ATMA

3
db = web.database(dbn='sqlite', db='sqlfile.sqlite') 
sely = db.select('carp', order="id ASC").list() 

sely sarebbe una list di depositi, storage è lo stesso di dict, ma è possibile accedere con argomenti obj.key, invece di obj["key"]. È possibile eseguire dict(obj) per convertire storage in dict.

-1

in finestre

return list(db.select('top',what='score',where="name = $id",vars=locals())

è ok. puoi ottenere il valore del punteggio.

ma

in Ubuntu

si shuld fate come questo

db.select('top',what='score',where="name = $id",vars=locals())[0]["score"]

non so perchè ma funziona nel mio computer lista

Problemi correlati