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