[英]NDB, Querying across multiple models. AppEngine
我正在努力跨多个模型进行查询。 这是我的类结构:
class User(ndb.Model):
...
class LogVisit(ndb.Model)
user = ndb.KeyProperty(kind=User)
...
class LogOnline(ndb.Model)
logVisit = ndb.KeyProperty(kind = LogVisit)
...
我想获得用户的LogOnline的列表
我想做的是这样的:
qry = LogOnline.query(LogOnline.logvisit.get().user.get() == user)
但是,应用程序引擎不允许我在查询中使用get方法。
有什么关于最佳解决方案的想法吗? 非常感谢。
最有效的方法是将用户密钥存储在LogOnline实体中。 我们看不到模型的其余部分,看不到LogVisit为整个练习增加了什么,因此很难看到LogVisit作为中间实体为设计带来了什么。
然后就
LogOnline.query().filter(LogOnline.user == user)
如果要在appengine上具有可伸缩的应用程序,则必须停止考虑SQL。 考虑纯粹的实体关系,不要尝试规范化数据模型。 诸如LogVisit之类的中间实体仅在需要多对多关系时才使用,但对于特定关系,如果它们有多个实例,则仍然效率不高。
你做错了。
# user variable is assumed to be a key
logonlines = [] # You can use set also
logvisits = LogVisit.query().filter(LogVisit.user == user).fetch()
for logvisit in logvisits:
logOnlinesA = LogOnline.query().filter(LogOnline.logVisit == logvisit.key).fetch()
logonlines.extend(logOnlinesA)
试试看 :
logvisits = LogVisit.query().filter(LogVisit.user == user).fetch(keys_only=True)
logOnlinesA = LogOnline.query().filter(LogOnline.logVisit.in(logvisits)).fetch()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.