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