I will try to test this later but I can tell you now how "IN" relates to "BELONGS".
GAE does not have "belongs" and web2py solves this by using "IN". Also you must realize that GAE performs a separate subquery for every item with a IN clause. So this is very inefficient. You're also limited to 30 subqueries and thus 30 items in a "IN". def BELONGS(self, first, second=None): if not isinstance(second, (list, tuple, set)): raise SyntaxError("Not supported") if not self.use_ndb: if isinstance(second, set): second = list(second) if first.type == 'id': second = [self.keyfunc(first._tablename, int(i)) for i in second] return [GAEF(first.name, 'in', second, lambda a, b:a in b)] On Tuesday, September 2, 2014 12:04:05 AM UTC+2, Russ King wrote: > Many thanks for reply however this doesn't seem to be a complete fix - > code is failing on the 'in' piece of this filter function and I am not > clear how this relates to the belongs code up above. > > Regards > Russ > > > GAE_FILTER_OPTIONS = { > '=': lambda q, t, p, v: q.filter(getattr(t,p) == v), > '>': lambda q, t, p, v: q.filter(getattr(t,p) > v), > '<': lambda q, t, p, v: q.filter(getattr(t,p) < v), > '<=': lambda q, t, p, v: q.filter(getattr(t,p) <= v), > '>=': lambda q, t, p, v: q.filter(getattr(t,p) >= v), > '!=': lambda q, t, p, v: q.filter(getattr(t,p) != v), > 'in': lambda q, t, p, v: q.filter(getattr(t,p).IN(v)), > } > > def filter(self, query, tableobj, prop, op, value): > return self.GAE_FILTER_OPTIONS[op](query, tableobj, prop, value) > > > On Mon, Sep 1, 2014 at 12:32 PM, Quint <muijse...@gmail.com <javascript:>> > wrote: > >> Ok, >> >> I did not test this but from what can see from here the line below needs >> to be changed. (This line does not yet consider NDB.) >> >> def BELONGS(self, first, second=None): >> if not isinstance(second, (list, tuple, set)): >> raise SyntaxError("Not supported") >> if not self.use_ndb: >> if isinstance(second, set): >> second = list(second) >> if first.type == 'id': >> second = [Key.from_path(first._tablename, int(i)) for i in second] >> second = [self.keyfunc(first._tablename, int(i)) for i in second] >> >> return [GAEF(first.name, 'in', second, lambda a, b:a in b)] >> >> Quint >> >> >> On Saturday, August 30, 2014 1:37:07 AM UTC+2, Russ King wrote: >> >>> >>> I am struggling to use belongs on GAE+NDB it appears that: >>> >>> quests = db(db.question.level.belongs([1])).select(db.question.id >>> ,db.question.level) is valid however >>> >>> quests = db(db.question.id.belongs([1])).select(db.question.id, >>> db.question.level) generates an error along the lines of >>> >>> <type 'exceptions.AttributeError'> type object 'question' has no >>> attribute '__key__' >>> >>> is this because the key field is different from the other fields and is >>> there some sort of workaround to retrieve a set of records from a list of >>> keys or am I missing something >>> >>> Regards >>> Russ >>> >> -- >> 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 a topic in the >> Google Groups "web2py-users" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/web2py/_Od_UkKW05w/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> web2py+un...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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.