the latest DAL produces this error users = mongo(mongo.user.age==18).select() File "/opt/web2py/gluon/dal.py", line 8004, in select return adapter.select(self.query,fields,attributes) File "/opt/web2py/gluon/dal.py", line 4528, in select colnames = [fix(column) for column in mongo_list_dicts[0]] File "/usr/local/lib/python2.7/dist-packages/pymongo-2.1.1-py2.7-linux-x86_64.egg/pymongo/cursor.py", line 402, in __getitem__ raise IndexError("no such item for Cursor instance") IndexError: no such item for Cursor instance
On Friday, May 11, 2012 12:40:35 AM UTC+1, Massimo Di Pierro wrote: > > Now I understand better where all these problems come from. I shall fix it > tonight. > > On Thursday, 10 May 2012 18:02:24 UTC-5, Francisco Costa wrote: >> >> i didn't understand your question.. >> This is the complete code >> >> import sys >> import time >> from gluon.dal import DAL, Field >> mongo = DAL('mongodb://localhost:27017/sapo') >> mongo.define_table('user', >> Field('name', 'text'), >> Field('age', 'integer'), >> Field('city', 'string') >> ) >> >> def insert_users(): >> mongo.user.insert(name='John', age=66, city='Toronto') >> mongo.user.insert(name='Mark', age=43, city='Boston') >> mongo.user.insert(name='Tom', age=43, city='Detroit') >> mongo.user.insert(name='Jim', age=18, city='Detroit') >> mongo.user.insert(name='Jack', age=18) >> mongo.user.insert(name='Eric', city='Boston') >> return 'users in database' >> >> def find_users(): >> users = mongo(mongo.user.age==18).select() >> return dict(users=users) >> >> >> >> >> On Thursday, May 10, 2012 11:58:36 PM UTC+1, Massimo Di Pierro wrote: >>> >>> What's the model? >>> >>> On Thursday, 10 May 2012 16:27:51 UTC-5, Francisco Costa wrote: >>>> >>>> I found another problem!! >>>> >>>> if you do this: >>>> mongo.user.insert(name='Jim', age=18, city='Detroit') >>>> mongo.user.insert(name='Jack', age=18) >>>> >>>> and then select >>>> users = mongo(mongo.user.age==18).select() >>>> >>>> you don't have the field "city" in one of the rows, so you get this >>>> error: >>>> >>>> users = mongo(mongo.user.age==18).select() >>>> File "/opt/web2py/gluon/dal.py", line 8123, in select >>>> return adapter.select(self.query,fields,attributes) >>>> File "/opt/web2py/gluon/dal.py", line 4700, in select >>>> return processor(rows,fields,colnames,False) >>>> File "/opt/web2py/gluon/dal.py", line 1681, in parse >>>> self.parse_value(value, fields[j].type,blob_decode) >>>> File "/opt/web2py/gluon/dal.py", line 1575, in parse_value >>>> return self.parsemap[key](value,field_type) >>>> File "/opt/web2py/gluon/dal.py", line 1641, in parse_id >>>> return int(value) >>>> ValueError: invalid literal for int() with base 10: 'Jack' >>>> >>>> >>>> >>>> On Thursday, May 10, 2012 10:16:32 PM UTC+1, Francisco Costa wrote: >>>>> >>>>> Just add a '\' at the end of line 4664 and your are done! >>>>> >>>>> Great job Massimo! >>>>> >>>>> >>>>> On Thursday, May 10, 2012 9:12:48 PM UTC+1, Massimo Di Pierro wrote: >>>>>> >>>>>> This helps. I have another attempt to fix this in trunk. Hard to test >>>>>> it since I do not have mongodb installed. >>>>>> >>>>>> On Thursday, 10 May 2012 08:39:22 UTC-5, Francisco Costa wrote: >>>>>>> >>>>>>> Still not working. I think Fields order is wrong. >>>>>>> >>>>>>> At the end of the select() function I write this: >>>>>>> >>>>>>> a = [] >>>>>>> for f in fields: >>>>>>> a.append(f.type) >>>>>>> return dict(rows=rows, fields=a, colnames=colnames) >>>>>>> >>>>>>> and I got this: >>>>>>> >>>>>>> colnames: >>>>>>> city >>>>>>> age >>>>>>> _id >>>>>>> name >>>>>>> fields: >>>>>>> id >>>>>>> text >>>>>>> integer >>>>>>> string >>>>>>> rows: >>>>>>> Toronto >>>>>>> 66L >>>>>>> 24652490551171733682233802752L >>>>>>> John >>>>>>> >>>>>>> >>>>>>>