NDB 中 M 到 M 的结构化查询
Structured query over M to M in NDB
我的模型是这样的
- 俱乐部
- 用户
- 课程
- 参考俱乐部(关键)
- 会话
- 参考课程(关键)
- 俱乐部会员资格
- 参考俱乐部(关键)
- 引用用户(键)
- 课程订阅
- 参考课程(关键)
- 引用用户(键)
现在,我想拥有我订阅的所有 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,我使用了这个 ,这就是为什么我可以做 if(但它很贵)
有更好的方法吗?至少更便宜。我在考虑 gql,但后来我列出了 IN
要做的事情。
可能像这样:
select key from courseSubscription, where course.club = {clubid} and user = {user}
然后一个ndb_get_multi
加载查询结果?
这有可能吗?
for
循环发出多个请求,您可以将它们组合成一个请求。
如果您的 CourseSubscription
与上述 SO link 中的 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
。你将不得不过滤掉那些。
我的模型是这样的
- 俱乐部
- 用户
- 课程
- 参考俱乐部(关键)
- 会话
- 参考课程(关键)
- 俱乐部会员资格
- 参考俱乐部(关键)
- 引用用户(键)
- 课程订阅
- 参考课程(关键)
- 引用用户(键)
现在,我想拥有我订阅的所有 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,我使用了这个 ,这就是为什么我可以做 if(但它很贵)
有更好的方法吗?至少更便宜。我在考虑 gql,但后来我列出了 IN
要做的事情。
可能像这样:
select key from courseSubscription, where course.club = {clubid} and user = {user}
然后一个ndb_get_multi
加载查询结果?
这有可能吗?
for
循环发出多个请求,您可以将它们组合成一个请求。
如果您的 CourseSubscription
与上述 SO link 中的 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
。你将不得不过滤掉那些。