您好,匿名用户
随意问技术百科期待您的加入

web.py 使用 db.select 返回的数据只能遍历一次

0 投票

遍历完后就变空了,这是为什么呢?
例如:

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

web.py 官方的 db.py 的内容 https://github.com/webpy/webpy/blob/m...

请问是什么原因造成的呢,如何解决?

用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
分享到:

1个回答

0 投票
 
最佳答案

Python 中的迭代器本来就是一次性的,无论是生成器表达式还是 yield 都是这样。如果你需要多次使用,应该先用 list 工厂函数将迭代器转换成列表。当然,转换之后迭代器就空了,但是数据保存到了列表中。

用户头像 回复 2012年 12月1日 @ Archer 上等兵 (494 威望)
选中 2012年 12月1日 @Morgana
提一个问题:

相关问题

+1 投票
1 回复 45 阅读
用户头像 提问 2012年 12月1日 @ Annie 上等兵 (299 威望)
+1 投票
1 回复 41 阅读
用户头像 提问 2012年 12月1日 @ Sagittarius 上等兵 (289 威望)
0 投票
1 回复 43 阅读
用户头像 提问 2012年 12月1日 @ Lucia 上等兵 (416 威望)
0 投票
1 回复 75 阅读
用户头像 提问 2012年 12月1日 @ Gemini 上等兵 (319 威望)
+1 投票
1 回复 35 阅读
用户头像 提问 2013年 9月7日 @ Nero 上等兵 (377 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...