I think that is outdated -- according to this 
(https://groups.google.com/d/msg/web2py/vWqOET74qg4/92DLUFTUsN0J), GAE does 
now support belongs but is limited to 30 items per query (so you have to 
break it up). Perhaps there is a better way, though.

Anthony

On Wednesday, March 21, 2012 9:26:44 PM UTC-4, Udi Milo wrote:
>
> It doesn't.
> I found this: 
> """"
> GAE does not support belongs and does not support OR. You have to do: 
>
> rows = db(db.media_type.name=='paper').select()&db 
> (db.media_type.name=='cd').select() 
>
> The & is done at the web2py level but since records are exclusive and 
> you are not sorting them, there is no major slowdown. 
> """""
>
> Since I'm a python newbie, how would you go about building the loop that 
> creates a very long query? you need to do some kind of python eval tricks 
> here that I don't know.
> I'm guessing its going to look like
>
> for id in board_ids:
>    query = query + new query(id)
>
> but how do you do it in python?
>
> On Wednesday, March 21, 2012 8:30:54 PM UTC-4, Anthony wrote:
>>
>> I didn't realize you were on GAE. I'm not quite sure how GAE handles 
>> this, so perhaps someone with more GAE experience can chime in. In an 
>> RDBMS, you should be able to do:
>>
>> board_ids = set([a.board for a in articles])
>> boards = db(db.boards.id.belongs(board_ids)).select()
>>
>> But not sure if that works on GAE.
>>
>> Anthony
>>
>> On Wednesday, March 21, 2012 7:30:58 PM UTC-4, Udi Milo wrote:
>>>
>>> Anthony,
>>>
>>> Thanks for answering so quickly.
>>> I did mean board and not board_id
>>>
>>> My question is very basic.
>>> I know that the article table has an Id column that is really the board 
>>> reference, but when I look at the result of the query and unification of:
>>> board_ids = set(map(lambda a: a.board, articles))
>>>
>>> I get a set of references,
>>> how do I use that set in another query to get all the boards?
>>> also, just to be sure, running this lambda expression does not hit the 
>>> db to fetch the boards, right?
>>>
>>> I can't use join b/c I'm running on GAE.
>>>
>>>
>>>
>>> On Wednesday, March 21, 2012 5:22:50 PM UTC-4, Anthony wrote:
>>>>
>>>> I have two db tables:
>>>>>
>>>>> board (name, created_on)
>>>>> article(board, name, title)
>>>>>
>>>>> currently, in my html I do a naive loop {{for article in articles}} {{=
>>>>> article.board.name}} {{pass}}
>>>>>
>>>>> I would like to change it and do something like:
>>>>> articles = db.select.all.......
>>>>> board_ids = set(map(lambda a: a.board_id, articles))
>>>>>
>>>>
>>>> Instead of a.board_id, do you mean a.board (I don't see a "board_id" 
>>>> field listed in your article table definition)? Also, is db.article.board 
>>>> a 
>>>> reference field to the db.board table? In that case, that means it is 
>>>> already storing the id of the referenced record in the db.board table 
>>>> (that's what reference fields store), so you don't need to retrieve it 
>>>> separately.
>>>>
>>>> Anyway, if you need the db.board.name value for all the records you 
>>>> are selecting from the db.article table, you should probably just do a 
>>>> join 
>>>> so you can get everything in a single query -- see 
>>>> http://web2py.com/books/default/chapter/29/6#Inner-joins.
>>>>  
>>>> Anthony
>>>>
>>>>

Reply via email to