繁体   English   中英

NDB,跨多个模型查询。 AppEngine上

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM