On Wednesday, September 21, 2016 at 3:30:49 AM UTC-4, Meinolf wrote:
>
> OMG, Is this normal?????
> i got chills telling me it had something to do with the *For Loop*, 
> played around with the LBs and UBs and the following worked:
>
>        * for i in range(-1, (len(getcourseids)-1)):*
>

First, if you want the subscripts of a list, just do range(len(thelist)). 
Do not subtract 1 from the length of the list -- range already handles that 
for you (it returns integers that are strictly less than the second 
argument). Also, no need to start with 0, as that is the default. And don't 
start with -1 -- when used as a subscript, that will simply retrieve the 
*last* item in the list, not the first. Also, in Python 2, use xrange() in 
for loops, which is more memory efficient (in Python 3, range has been 
replaced by xrange).
 

>            * c = db.item.id <http://db.item.id>==getcourseids[i].item_id*
> *            s.append(db(c).select(db.item.course_title)[i])*
>

Here it is not clear why you are subscripting the result of the select with 
[i]. Presumably each query returns a single matching row, which means you 
want the subscript to always be [0] -- otherwise, you will get a list index 
out of range error.

Anyway, you should not be using the above method at all, as it is very 
inefficient (you are doing a separate database query for every single item 
in getcourseids, when you could instead use a single query). Villas has the 
right idea, but getcourseids.values() assumes getcourseids is a dictionary 
-- presumably it is actually a Rows object. So, you can do:

s = db(db.item.id.belongs([c.item_id for c in 
getcourseids])).select(db.item.course_title)

Note, the above is a Rows object. You can convert it to a list if you 
really need a list, but most likely you can work with the Rows object (it 
can be iterated and indexed just like a list).

Assuming getcourseids is a Rows object and the only reason it was created 
was to get the item_id values to be used in this subsequent query, you can 
instead skip the creation of getcourseids and just use a nested select 
<http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#belongs>
:

id_query = db([your query to retrieve course 
ids])._select(db.your_course_table.item_id)
s = db(db.item.id.belongs(id_query)).select(db.item.course_title)


Anthony

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to