2

次の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番目のクラスのフィールドが含まれている必要があります-titleおよびfile(マッチングはフィールドごとに行う必要がありfileHashます)。

4

1 に答える 1

4

同じGQLSelectステートメントを使用してデータストアから異なる種類を取得する方法はありません。

もう1つのオプションは、ReferencePropertyUsersRSSを使用してとの間に多対1の関係を作成し、次の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

ReferenceProperty RPCオーバーヘッドからアプリを保存するには、常緑の記事ReferencePropertyprefetchingを参照してください。

于 2011-04-27T14:43:57.953 に答える