我有以下两个类:

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 除了 fileHashadded 字段应包含第二类的字段 - titlefile (匹配应通过 fileHash 场地)。

有帮助吗?

解决方案

使用相同 GQL选择语句.

另一个选择是使用 ReferencePropertyUsersRSSFiles, ,以这种方式重构代码:

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开销中保存下来,请查看常绿文章 参考杂质预取.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top