Lets hope Massimo fix that today in trunk
On Wednesday, May 9, 2012 12:28:50 PM UTC+1, kokoyo wrote: > > Hi Costa , first im sorry for my wrong post above,It should be a new > post with new question. Actually i have same problem like you, > i did a quick test and have not solved this issue yet, here is what i did: > > set driver to use mongodb in: DB.py : > > if not request.env.web2py_runtime_gae: > ## if NOT running on Google App Engine use SQLite or other DB > #db = DAL('sqlite://storage.sqlite') > db = DAL('mongodb://localhost:27017/foo') > > > Click Register on menu to put a new User into mongo, submit: > <type 'exceptions.ValueError'> invalid literal for int() with base > 10: 'koko' > > Go to web2py appadmin admindatabase, open > auth_user<http://127.0.0.1:8000/test/appadmin/insert/db/auth_user> > table: > Invalid Query > invalid literal for int() with base 10: 'koko' > > > Use mongo console to run query : > db.auth_user.find({}) > > new user is alread inserted into db,--> "insert" is done. > but the error happens when mapping value and key or key type in DAL, im not > sure, the type of value is not match. looks like DAL understands ID field > is FirstName field. > > > - > > *File C:\w2py3\gluon\dal.py in parse_id at line 1641* code arguments > variables > Function argument list > > (self=<gluon.dal.MongoDBAdapter object>, value='koko', field_type='id') > Code listing > > 1636. > 1637. > 1638. > 1639. > 1640. > 1641. > > 1642. > 1643. > 1644. > 1645. > > if not self.dbengine=='google:datastore': > value = bar_decode_string(value) > return value > > def parse_id(self, value, field_type): > return int(value) > > > def parse_integer(self, value, field_type): > return int(value) > > Variablesbuiltinint<type 'int'>value'koko' > > > > > > > > > On Wednesday, May 9, 2012 7:42:56 PM UTC+9, Francisco Costa wrote: >> >> I've enumerated fields and colnames and they are like this: >> >> fields: >> id >> text >> integer >> string >> >> >> colnames: >> city >> age >> _id >> name >> >> >> I believe they don't match and thats why there's 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,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: 'Toronto' >> >> >> >> >> >> On Monday, May 7, 2012 11:40:36 PM UTC+1, 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' >>>>>>>> >>>>>>>> >>>>>>>>