2012-03-05 44 views
5

Tôi đã rối tung xung quanh với web.py gần đây và muốn lấy một số thứ từ một db và trả lại cho tôi một đối tượng "Lưu trữ". một mã tôi đang sử dụng để gọi thông tin của tôi là:web.py cơ sở dữ liệu chọn truy cập

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

khi sely chạy nó sẽ rơi xuống tôi ra văn bản như vậy:

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

khi bạn in ra sely dòng lưu trữ đi ra. làm thế nào tôi có thể nhận được từ điển ra khỏi đối tượng này?

Trả lời

4

Thủ thuật Python chung để xử lý các API không xác định là sử dụng dir builtin. Hãy thử dir(sely) trong thông dịch viên để xem các biến và chức năng thành viên nào được xác định cho đối tượng bạn nhận được.

  • Nếu bạn thấy một cái gì đó giống như __iter__, bạn có thể gọi list(sely) để chuyển đổi các kết quả vào một danh sách, và nói chung lặp qua các đối tượng trong một vòng lặp.
  • Nếu bạn thấy một cái gì đó như __getitem__, thì bạn có thể lập chỉ mục vào đối tượng và hy vọng sẽ nhận được một giá trị trở lại.

Như một mặt lưu ý, tôi chỉ cố gắng ra mã của bạn và tôi nhận được sely là một ví dụ web.utils.IterBetter (trả về 0 hàng, thay vì dự kiến ​​3 trong trường hợp của tôi). Vì vậy, tôi không thể thực sự tái tạo vấn đề của bạn (nhưng có vấn đề của riêng tôi, vì vậy để nói chuyện).

+1

Nhờ danh sách (sely) làm việc theo cách tôi muốn nó – ATMA

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

sely sẽ là một list kho, storage cũng giống như dict, nhưng bạn có thể truy cập vào tranh cãi với obj.key, thay vì obj["key"]. Bạn có thể làm dict(obj) để chuyển đổi storage thành dict.

-1

trong cửa sổ

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

là ok. bạn có thể nhận được giá trị của điểm số.

nhưng

trong ubuntu

bạn shuld làm điều đó như thế này

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

tôi không biết tại sao nhưng nó hoạt động trong máy tính của tôi

Các vấn đề liên quan