为了账号安全,请及时绑定邮箱和手机立即绑定

遍历完后就变空了,请问是什么原因造成的呢,如何解决?

遍历完后就变空了,请问是什么原因造成的呢,如何解决?

白板的微信 2023-04-08 21:17:17
例如: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 工厂函数将迭代器转换成列表。当然,转换之后迭代器就空了,但是数据保存到了列表中。

查看完整回答
反对 回复 2023-04-11
?
LEATH

TA贡献1936条经验 获得超6个赞

所以这就是需要ORM的重要性啦
不要直接把DB select的结果返回 而是包装成一个model的Object返回 
可以用第三方的 或者简单就自己定义对象和set值
这样就可以避免这种迭代一次的情况,更重要的是,当你这个db方法被很多地方调用的时候,如果要加一点字段,就很恶心了,到处改,封装成model再返回,就只需要改一个地方啦,把修改集中。

查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信