2012-03-05 3 views
5

최근에 web.py를 사용하고 있는데 DB의 일부 항목을 가져 와서 "Storage"객체를 반환하려고합니다. 는 I 내 정보를 전화를 사용하고있는 코드는 다음과 같습니다web.py 데이터베이스 액세스 선택

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

때 sely 그것과 같이 텍스트를 나를 떨어 실행 : 당신이 밖으로 인쇄 할 때

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

이 sely 저장 라인이 나온다. 이 객체에서 어떻게 사전을 가져올 수 있습니까?

답변

4

알 수없는 API를 처리하기위한 일반적인 파이썬 트릭은 dir builtin을 사용하는 것입니다. 인터프리터에서 dir(sely)을 시도하면 가져 오는 개체에 대해 정의 된 멤버 변수 및 함수를 확인할 수 있습니다.

  • 당신이 __iter__ 같은 것을 볼 경우, 당신은 목록에 결과를 변환 list(sely) 전화, 일반적으로 루프에서 객체를 반복 할 수 있습니다.
  • __getitem__과 같은 것이 있으면 개체에 색인을 생성하여 값을 다시 얻을 수 있기를 바랍니다. (내 경우에는 3을 예상하는 대신, 0 행을 반환) 보조 노트로

, 나는 당신의 코드를 시도하고 나는 web.utils.IterBetter 예로 sely를 얻을. 그래서 나는 정말로 당신의 문제를 재현 할 수는 없다.

+1

감사 목록을 작동 내가 원했던대로 일했다. – ATMA

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

selystoragedict과 동일, 창고의 list 겠지만, 대신 obj["key"]의, obj.key으로 인수에 액세스 할 수 있습니다. dict(obj)을 입력하면 storagedict으로 변환 할 수 있습니다. 창

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

에서

-1

괜찮습니다. 당신은 점수의 가치를 얻을 수 있습니다.

하지만 우분투

에서

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

처럼 할 shuld (sely) 난 이유를 모르겠어하지만 내 컴퓨터에