NDB,跨多个模型进行查询。阿彭金

2024-07-02 12:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难跨多个模型进行查询。 我的班级结构如下:

class User(ndb.Model):
    ...

class LogVisit(ndb.Model)
    user = ndb.KeyProperty(kind=User)
    ...

class LogOnline(ndb.Model)
    logVisit = ndb.KeyProperty(kind = LogVisit)
    ...

我想得到用户的登录列表

我想做的是:

^{pr2}$

但是appengine不允许我在查询中使用get方法。在

有什么好办法吗? 非常感谢。在


Tags: 用户模型列表model结构class班级ndb
2条回答

最有效的方法是将用户的密钥存储在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)

试试看:

^{pr2}$

相关问题 更多 >