Short answer:

if you cache the select, subqueries are missing. So you have to replace

 email = row.emails.select().first()

with

 email = db(db.emails.studio==row.id).select().first()


This is probably the only change of behavior and it is due to the need of 
speedup. before cache was caching value but not the full object. We 
achieved a 100x speedup by caching the final rows object. The problem is 
that subselects, update_record and delete_record are methods of the rows 
and they are not serializable, therefore they are missing when the rows are 
cached.

Massimo


On Saturday, 8 September 2012 08:34:46 UTC-5, Jose wrote:
>
> Hi all
>
> In Version 2.0.0 (2012-06-04 18:49:33) dev works well
>
> Model:
>
> tb_studio = db.define_table('studio',
>     Field('name', label=T('Name')),
>     #...
>     format='%(name)s',
>     migrate=MIGRATE
> )
>
> tb_emails = db.define_table('emails',
>     Field('studio', tb_studio, readable=False, writable=False, default=1),
>     Field('email', label=T('Email')),
>     migrate=MIGRATE
> )
>
> Controller
>
> def bg_studio():
>     row = db(tb_studio.id==1).select(cache=(cache.ram, 60)).first()
>     email = row.emails.select().first()    
>
>     return dict(row=row, email=email)
>
>
> In Version 2.0.8 (2012-09-07 09:38:35) stable, error occurs:
>
> File "/usr/home/jose/web2py/applications/dm/controllers/default.py" 
> <http://127.0.0.1:8000/admin/default/edit/dm/controllers/default.py>, line 
> 45, in bg_studio
>     email = row.emails.select().first()
> AttributeError: 'Row' object has no attribute 'emails'
>
> Jose
>

-- 



Reply via email to