Question

Je les 2 catégories suivantes:

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)    

Je dois créer une requête GQL, qui renverra des données des deux tables:

items = UsersRSS.gql("WHERE userId = :userId ORDER BY date DESC LIMIT 10", userId=user_id)

Mais chacun item en dehors des champs de fileHash et added, doit contenir des champs de la deuxième classe -. title et file (correspondant doit être fait par champ fileHash)

Était-ce utile?

La solution

Il n'y a aucun moyen de récupérer différents types de magasin de données en utilisant la même GQL instruction Select .

serait d'utiliser le ReferenceProperty pour créer une relation many-to-one entre UsersRSS et Files, refactorisation votre code de cette façon:

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)

De cette façon, les propriétés de Files seront déréférencé automatiquement en utilisant la notation dot 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

Pour enregistrer votre application à partir du RPC ReferenceProperty ont en tête un regard à l'article à feuilles persistantes ReferenceProperty préchargement .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top