我的模特就像这样
现在,我想让我订阅的所有course
个订阅,输入club
和user
我所做的是:
courses = Courses(Courses.club == club.key).fetch(keys_only=True)
real_list = []
for course in courses:
if CourseSubscription.get_by_id(user, course):
real_list.append(course)
sessions = Session.query(Session.course.IN(real_list),Session.start_date >= start_date).fetch()
对于CourseSubscription我使用了这个https://stackoverflow.com/a/26746542/1257185,这就是为什么我可以做if(但它很昂贵)
有更好的方法吗?至少便宜一点。我在考虑使用gql,但是我有一个IN
的列表。
可能像smt一样:
select key from courseSubscription, where course.club = {clubid} and user = {user}
然后ndb_get_multi
加载查询结果?
这有可能吗?
答案 0 :(得分:1)
for
循环会发出大量请求,您可以将它们合并为一个请求。
如果您的CourseSubscription
与上述SO链接中的CourseInscription
相同,那么您可以获得订阅密钥列表并进行一次get_multi()
调用以获取所有订阅密钥订阅:
subscription_keys = [ndb.Key(CourseSubscription, CourseSubscription.build_id(user, course))
for course in courses]
real_list = ndb.get_multi(subscription_keys)
如果该密钥不存在,则该订阅将为None
。你必须过滤掉那些。