为什么我的web.pydb.select返回的数据只能遍历一次?怎么解决,web.pydb.select,遍历完后就变空了,这是为
为什么我的web.pydb.select返回的数据只能遍历一次?怎么解决,web.pydb.select,遍历完后就变空了,这是为
遍历完后就变空了,这是为什么呢?
例如:
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...
请问是什么原因造成的呢,如何解决?
同学你的数据只有一条呢,是不是应该就是q[0]来获取数据吧!
所以这就是需要ORM的重要性啦
不要直接把DB select的结果返回 而是包装成一个model的Object返回
可以用第三方的 或者简单就自己定义对象和set值
这样就可以避免这种迭代一次的情况,更重要的是,当你这个db方法被很多地方调用的时候,如果要加一点字段,就很恶心了,到处改,封装成model再返回,就只需要改一个地方啦,把修改集中。
Python 中的迭代器本来就是一次性的,无论是生成器表达式还是 yield 都是这样。如果你需要多次使用,应该先用 list 工厂函数将迭代器转换成列表。当然,转换之后迭代器就空了,但是数据保存到了列表中。
编橙之家文章,
相关内容
- Python3.5想把抓到的股票信息以循环方式存入到csv文件中
- Python语言能完成检索Twitter搜索功能吗?,pythontwitter,看社
- 我的python正则表达式写的对吗,python正则表达式,Html源
- Python如何在网页上呈现数据库的值并做到有翻动效果,
- python *乘号在命令行中为什么报错,python乘号,环境Mac
- beautifulsoup3.2.1使用时遇到的一些小问题,,参考了文档
- 谁能分享Python OpenStack高质量的部署资料,pythonopenstac
- 参照教程的Flask操作显示AttributeError是什么问题,,Flas
- 只有python2.6o可以在sx版本mod_wsgi中使用吗?,python2.6omo
- python语言中为什么说getter和setter用起来很傻,getterset
评论关闭