Hello, i got this error when tried pymongo and web2py:
On Linux:
<type 'exceptions.ImportError'> cannot import name son
.....

    rows = self.dbset(field == value, ignore_common_filters = 
self.ignore_common_filters).select(limitby=(0, 1))
  File "/home/kokoyo/webapps/w2p/web2py/gluon/dal.py", line 8134, in select
    return adapter.select(self.query,fields,attributes)
  File "/home/kokoyo/webapps/w2p/web2py/gluon/dal.py", line 4675, in select
    tablename, mongoqry_dict , mongofields_dict, mongosort_list, limitby_limit, 
limitby_skip = self._select(query,fields,attributes)
  File "/home/kokoyo/webapps/w2p/web2py/gluon/dal.py", line 4611, in _select
    from pymongo import son
ImportError: cannot import name son

Code listing

4606.
4607.
4608.
4609.
4610.
4611.

4612.
4613.
4614.
4615.

            return ','.join(self.represent(item,field_type) for item in 
expression)
        else:
            return expression

    def _select(self,query,fields,attributes):
        from pymongo import son


        for key in set(attributes.keys())-set(('limitby','orderby')):
            raise SyntaxError, 'invalid select attribute: %s' % key

But its OK on Windows.
googling and found this: 
https://github.com/mongodb/mongo-snippets/blob/master/sharding/simple-setup.py

try:
    # new pymongo
    from bson.son import SON
except ImportError:
    # old pymongo
    from pymongo.son import SON


tried on Linux:

from bson.son import SON 
from pymongo.son import SON 

no error.
i dont know why  from pymongo import son 
does not work on Linux. any idea?


On Tuesday, May 8, 2012 7:40:36 AM UTC+9, Massimo Di Pierro wrote:
>
> Please try again.
>
> On Monday, 7 May 2012 15:48:04 UTC-5, Francisco Costa wrote:
>>
>> missing a colon at the end of the line 4677
>>
>> if key == 'id'
>>
>>
>> and now I get this error
>>
>>   File "/opt/web2py/gluon/dal.py", line 8134, in select
>>     return adapter.select(self.query,fields,attributes)
>>   File "/opt/web2py/gluon/dal.py", line 4711, in select
>>     return processor(rows,columns,False)
>>   File "/opt/web2py/gluon/dal.py", line 1675, in parse
>>     for j,colname in enumerate(colnames):
>> TypeError: 'bool' object is not iterable
>>
>>
>> maybe because of the False on line 4711
>>
>>
>>
>>
>> On Monday, May 7, 2012 9:27:35 PM UTC+1, Massimo Di Pierro wrote:
>>>
>>> Thanks for your help and check on this. I just committed a fix in trunk 
>>> that should address it. Please let me know.
>>>
>>> On Monday, 7 May 2012 15:19:40 UTC-5, Francisco Costa wrote:
>>>>
>>>> I think that the mongofields_dict.keys() don't match to the data in the 
>>>> rows
>>>>
>>>> mongofields_dict:
>>>> id
>>>> name
>>>> age
>>>> city
>>>> rows:
>>>> Toronto
>>>> 66L
>>>> 24652490551171733682233802752L
>>>> John
>>>>
>>>>
>>>> On Monday, May 7, 2012 8:42:33 PM UTC+1, Massimo Di Pierro wrote:
>>>>>
>>>>> Your linennumbers do not much the code in trunk. Please try the code 
>>>>> in trunk. Anyway, something goes wrong in the parse(self, rows, fields, 
>>>>> colnames, blob_decode=True) function. I suspect mongo does not return the 
>>>>> columns in the order web2py think it does. Can you print the input of the 
>>>>> parse function?
>>>>>
>>>>> On Monday, 7 May 2012 13:20:39 UTC-5, Francisco Costa wrote:
>>>>>>
>>>>>> So I have this:
>>>>>>
>>>>>> import sys
>>>>>> import time
>>>>>> from gluon.dal import DAL, Field
>>>>>> mongo = DAL('mongodb://localhost:27017/tymr')
>>>>>> 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==66).select()
>>>>>>     return dict(users=users)
>>>>>>
>>>>>>
>>>>>> after I run *insert_users* I check in MongoDb via terminal and 
>>>>>> everything is correct:
>>>>>> > db.user.find()
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000000"), "city" : "Toronto", 
>>>>>> "age" : NumberLong(66), "name" : "John" }
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000001"), "city" : "Boston", 
>>>>>> "age" : NumberLong(43), "name" : "Mark" }
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000002"), "city" : "Detroit", 
>>>>>> "age" : NumberLong(43), "name" : "Tom" }
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000003"), "city" : "Detroit", 
>>>>>> "age" : NumberLong(18), "name" : "Jim" }
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000004"), "age" : 
>>>>>> NumberLong(18), "name" : "Jack" }
>>>>>> { "_id" : ObjectId("4fa80feea34feb34f8000005"), "city" : "Boston", 
>>>>>> "name" : "Eric" }
>>>>>>
>>>>>> but when I run *find_users* I get this error:
>>>>>>
>>>>>>   File "/opt/web2py/gluon/dal.py", line 7578, in select
>>>>>>     return adapter.select(self.query,fields,attributes)
>>>>>>   File "/opt/web2py/gluon/dal.py", line 4290, in select
>>>>>>     return self.parse(rows,fields,mongofields_dict.keys(),False)
>>>>>>   File "/opt/web2py/gluon/dal.py", line 1600, in parse
>>>>>>     self.parse_value(value, fields[j].type,blob_decode)
>>>>>>   File "/opt/web2py/gluon/dal.py", line 1496, in parse_value
>>>>>>     return self.parsemap[key](value,field_type)
>>>>>>   File "/opt/web2py/gluon/dal.py", line 1562, in parse_id
>>>>>>     return int(value)
>>>>>> ValueError: invalid literal for int() with base 10: 'Toronto'
>>>>>>
>>>>>>
>>>>>>

Reply via email to