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