Frage

Ich habe die folgenden 2 Klassen:

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)    

Ich muss eine GQL -Abfrage erstellen, die eine Daten aus beiden Tabellen zurückgibt:

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

Aber jeder item Außerdem fileHash und added Felder sollten Felder aus der zweiten Klasse enthalten - title und file (Matching sollte von durchgeführt werden von fileHash aufstellen).

War es hilfreich?

Lösung

Es gibt keine Möglichkeit, sich von DataStore -verschiedenen Arten mit demselben abzurufen GQL SELECT -Anweisung.

Eine andere Option wäre die Verwendung des Referenzproperschaft eine viele zu eins-eins-zu-Eins-Beziehung zwischen UsersRSS und Files, refactorieren Sie Ihren Code auf diese Weise:

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)

Auf diese Weise die Files Eigenschaften werden automatisch mit der item.file.title Punktnotation:

for item in items:
    print item.UserID
    print item.Added
    print item.file.title #This costs an additional RPC call to Datastore

Um Ihre App vor dem ReferenceProperty RPC -Overhead zu speichern Referenzproperschaftsvorabfassungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top