例如:db = web.database(dbn='sqlite', db='data.db') #設置數據庫連接q = db.select('customer_order', order='id DESC') #返回數據得到結果后,查詢q[1]返回<Storage {'customer_name': u'\u5e7f\u4e49', 'update_time': None, 'create_time': u'2012-03-05 22:44:07.428652', 'description': u'nice', 'id': 4}>再查詢q[1]返回Traceback (most recent call last): File "<stdin>", line 1, in <module> File "web/utils.py", line 669, in __getitem__
raise IndexError, "already passed "+str(i)
IndexError: already passed 1
2 回答

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
Python 中的迭代器本來就是一次性的,無論是生成器表達式還是 yield 都是這樣。如果你需要多次使用,應該先用 list 工廠函數將迭代器轉換成列表。當然,轉換之后迭代器就空了,但是數據保存到了列表中。

LEATH
TA貢獻1936條經驗 獲得超7個贊
所以這就是需要ORM的重要性啦
不要直接把DB select的結果返回 而是包裝成一個model的Object返回
可以用第三方的 或者簡單就自己定義對象和set值
這樣就可以避免這種迭代一次的情況,更重要的是,當你這個db方法被很多地方調用的時候,如果要加一點字段,就很惡心了,到處改,封裝成model再返回,就只需要改一個地方啦,把修改集中。
添加回答
舉報
0/150
提交
取消