質問

次の2つのクラスがあります。

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 フィールドには、2番目のクラスのフィールドが含まれている必要があります - titlefile (マッチングはによって行う必要があります fileHash 分野)。

役に立ちましたか?

解決

同じものを使用して、DataStoreからさまざまな種類を取得する方法はありません GQL Selectステートメント.

別のオプションは、を使用することです ReferenceProperty の間の多くの関係を作成するため UsersRSSFiles, 、この方法でコードをリファクタリングします。

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

ReferenceProperty RPCオーバーヘッドからアプリを保存するには、常緑記事をご覧ください ReferencePropertyプリフェッチ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top