Thanks for the info.
On Saturday, March 17, 2012 4:11:40 AM UTC+5:30, howesc wrote: > > 1. that is how GAE queries works. it's GAE's fault, not web2py's. > 2. correct. Rows objects are not pickelable. as_list() or as_dict() are > your friend. this is not just for GAE but all environments i believe. > > On Friday, March 16, 2012 10:03:36 AM UTC-7, Sushant Taneja wrote: >> >> Hi, >> >> I am stuck here, I tried the mentioned code, there are 2 problems I am >> facing: >> >> 1. All the table columns are extracted rather than only the two columns >> in the select() >> 2. I get pickling error when I try to add the Rows object to memcache >> >> *PicklingError: Can't pickle <type 'function'>: attribute lookup >> __builtin__.function failed* >> >> but once I use the as_list() function it works fine. >> >> Any thoughts ? >> >> On Friday, March 16, 2012 1:07:58 PM UTC+5:30, Sushant Taneja wrote: >>> >>> Thanks ! >>> >>> On Friday, March 16, 2012 2:04:42 AM UTC+5:30, Jonathan Lundell wrote: >>>> >>>> On Mar 15, 2012, at 1:15 PM, Sushant Taneja wrote: >>>> > I have a tags table which will be available to all logged in users. >>>> The table has the following structure: >>>> > >>>> > db.define_table('META_TAG', >>>> > Field('tag','string',notnull=True), >>>> > Field('root_tag','string',notnull=True), >>>> > Field('active_ind','string',length=1,default='Y') >>>> > ) >>>> > >>>> > This table will be rarely (once a month) updated via an >>>> administrative interface. >>>> > I read various web2py based examples and gae examples on using >>>> memcache. Each followed a different approach. >>>> > As per my understanding from appengine documentation, I have written >>>> the following helper function in a controller to use memcache: >>>> > >>>> > from google.appengine.api import memcache >>>> > >>>> > def get_tags(): >>>> > """This function returns cached value for META_TAG table""" >>>> > tags = memcache.get("tags") >>>> > if not words: >>>> > words = >>>> db(db.META_TAG.active_ind=='Y').select(db.META_TAG.tag,db.META_TAG.root_tag) >>>> > memcache.add("tags",tags) >>>> > return tags >>>> > else: >>>> > return tags >>>> > >>>> > Will the above code ensure that the correct data is always available >>>> in the memcache ? >>>> >>>> You seem to be mixing the names 'words' and 'tags'. >>>> >>>> As a matter of style, I'd move the return outside the if/else. >>>> >>>> Don't forget to set the cache when you update the tags. >>>> >>>> It's best to test for 'is None', in case your cached object can >>>> legitimately evaluate to False (an empty list or string, for example). So >>>> more like: >>>> >>>> from google.appengine.api import memcache >>>> >>>> def get_tags(): >>>> """This function returns cached value for META_TAG table""" >>>> tags = memcache.get("tags") >>>> if tags is None: >>>> tags = >>>> db(db.META_TAG.active_ind=='Y').select(db.META_TAG.tag,db.META_TAG.root_tag) >>>> memcache.add("tags",tags) >>>> return tags >>>> >>>>