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

Reply via email to