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
>>>>>>>
>>>>>>>
>>>>>>>

Reply via email to