I would replace 

retVal = []
for entity in db(db.table2.id > 0).select():
    retVal += entity.table1.name

with

table1_map = db(db.table2 <http://db.table2.id/>).select().as_dict()
retVal = [table1_map[entity.table1].name <http://entity.table1.name/> for 
entity in db(db.table2 <http://db.table2.id/>).select()]

It will loads all records from table1 in ram but your code does it too. Two 
queries instead of many.
select().as_dict() creates a dict where the key is the id and the value is 
the record.

On Tuesday, 4 June 2013 04:25:06 UTC-5, guruyaya wrote:
>
> Lets examine this code for a sec:
> db.define_table('table1',Field('name'))
> db.define_table('table2',Field('table1', db.table1), Field('name2'))
>
> Now, if I need a list of all table2 entries, but not the table1 entries, 
> I'll do something like this:
>
> retVal = []
> for entity in db(db.table2.id > 0).select():
>     retVal += entity.name2
>
> BUT
> As you well know, web2py acctuall did ask for table1 info, just in case 
> I'll do this:
>
> retVal = []
> for entity in db(db.table2.id > 0).select():
>     retVal += entity.table1.name
>
> On a normal hosting, it doesn't matter that much, but on GAE, it does an 
> extra query to the datastore, and that's just a waste. 
> Is there a way to avoid that?
>
> Thanks in advance
> Yair
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to