2012-03-05 16 views
5

Niedawno przeglądałem w web.py i chciałem pobrać pewne rzeczy z db i zwróciło mi obiekt "Storage". kod używam zadzwonić moje informacje to:Wybieranie dostępu do bazy danych web.py

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

gdy sely biegnie spada mi tekst tak:

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

kiedy wydrukować sely linia magazynowanie wychodzi. jak mogę uzyskać słownik z tego obiektu?

Odpowiedz

4

Ogólną sztuczką Pythona do radzenia sobie z nieznanymi interfejsami API jest użycie dir builtin. Wypróbuj dir(sely) w tłumaczu, aby zobaczyć, jakie zmienne składowe i funkcje są zdefiniowane dla otrzymywanego obiektu.

  • Jeśli widzisz coś takiego __iter__ można nazwać list(sely) przekonwertować wyniki do listy, a ogólnie iteracyjne nad obiektu w pętli.
  • Jeśli widzisz coś takiego jak __getitem__, możesz indeksować obiekt i mieć nadzieję na odzyskanie wartości.

Na marginesie, ja po prostu wypróbować swój kod i uzyskać sely być web.utils.IterBetter instancja (która zwraca 0 wierszy, zamiast oczekiwać 3 w moim przypadku). Nie mogę więc odtworzyć twojego problemu (ale mam własne problemy, że tak powiem).

+1

Podziękuj (sely) pracował tak, jak tego chciałem – ATMA

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

sely byłoby list z magazynów, storage jest taka sama jak dict, ale można uzyskać dostęp do argumentów z obj.key zamiast obj["key"]. Możesz wykonać dict(obj), aby przekonwertować storage na dict.

-1

w oknach

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

jest w porządku. możesz uzyskać wartość wyniku.

ale

w ubuntu

shuld to zrobić jak ten

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

nie wiem dlaczego, ale to działa w moim komputerze listę

Powiązane problemy