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