簡體   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