如何从两个GQL类中提取数据?
-
24-10-2019 - |
题
我有以下两个类:
class UsersRSS(db.Model):
userId = db.IntegerProperty()
fileHash = db.StringProperty()
added = db.DateTimeProperty(auto_now_add=True)
class Files(db.Model):
fileHash = db.StringProperty()
title = db.StringProperty()
file = db.BlobProperty()
added = db.DateTimeProperty(auto_now_add=True)
我需要创建一个GQL查询,该查询将从两个表中返回数据:
items = UsersRSS.gql("WHERE userId = :userId ORDER BY date DESC LIMIT 10", userId=user_id)
但是每个 item
除了 fileHash
和 added
字段应包含第二类的字段 - title
和 file
(匹配应通过 fileHash
场地)。
解决方案
使用相同 GQL选择语句.
另一个选择是使用 ReferenceProperty 在 UsersRSS
和 Files
, ,以这种方式重构代码:
class UsersRSS(db.Model):
userId = db.IntegerProperty()
file = db.ReferenceProperty(Files)
added = db.DateTimeProperty(auto_now_add=True)
class Files(db.Model):
fileHash = db.StringProperty()
title = db.StringProperty()
file = db.BlobProperty()
added = db.DateTimeProperty(auto_now_add=True)
items = UsersRSS.gql("WHERE userId = :userId ORDER BY date DESC LIMIT 10", userId=user_id)
这样, Files
使用该属性将自动使用 item.file.title
点表示法:
for item in items:
print item.UserID
print item.Added
print item.file.title #This costs an additional RPC call to Datastore
要将您的应用程序从参考Property RPC开销中保存下来,请查看常绿文章 参考杂质预取.
不隶属于 StackOverflow