0

Ich habe eine Frage meine db Modell wie folgt aussieht:Google App Engine + relationale Datenbank - erhalten ID

class UserAnswer (db.Model): 
user = db.UserProperty() 
name = db.StringProperty() 
email = db.StringProperty() 
occupation = db.IntegerProperty() 
howreach = db.IntegerProperty() 
rating = db.IntegerProperty() 
comment = db.StringProperty(multiline=True) 

class Involves(db.Model): 
shortName = db.StringProperty() 
fullName = db.StringProperty() 

class UserInvolves(db.Model): 
userAnswer = db.ReferenceProperty(UserAnswer) 
involve = db.ReferenceProperty(Involves) 

Wie kann ich einen wählen etwas tun:

def getInvolves(user): 
results = db.GqlQuery("Select * from UserInvolves as ui where ui.userAnswer.ID='"+user.ID+"'") 

meine ich, wie ich kann diesen ID-Schlüssel erhalten? Wie wenn ich versuche, wie oben ich einen Fehler recive:

Traceback (most recent call last): 
File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 517, in __call__ 
handler.post(*groups) 
File "C:\Program Files\Google\google_appengine\demos\b00213576\main.py", line 217, in post 
involves = getInvolves(answer) 
File "C:\Program Files\Google\google_appengine\demos\b00213576\main.py", line 128, in getInvolves 
results = db.GqlQuery("Select * from UserInvolves as ui where ui.userAnswer.ID='"+user.ID+"'") 
AttributeError: 'UserAnswer' object has no attribute 'ID' 

Und ich weiß nicht, wie zu GAE konvertieren:/

+1

Sie können nicht tun, schließt sich in App Engine. Sie müssen Denormalisierung durchführen, um diese Art von Abfrage durchzuführen. – geoffspear

+0

ok, aber was bedeutet es? Kannst du mir Beispiel geben ?? – canimbenim

Antwort

0
user_answer = UserAnswer.get_by_id(user.ID) 
for user_involve in user_answer.userinvolves_set: 
    # these are your UserInvolves items 
+0

Sind Sie sicher, dass es dasselbe ist? Ich kann nicht verstehen, warum Sie zuerst user_answer und später dies in für als user_answer nicht user_ivolve innerhalb nehmen? – canimbenim

+0

Was ich geschrieben habe, verwendet eine Funktion namens Rückreferenzen. Aus den App-Engine-Dokumenten: ReferenceProperty hat eine weitere nützliche Funktion: Rückverweise. Wenn ein Modell über eine ReferenceProperty mit einem anderen Modell verfügt, erhält jede referenzierte Entität eine Eigenschaft, deren Wert eine Query ist, die alle Entitäten des ersten Modells zurückgibt, die auf sie verweisen. – ArcaTech

+0

; O Es ist so anders als normal sql immer noch kann ich nicht verstehen, wie es funktioniert Ich werde versuchen, es zu tun, wie Sie geschrieben, wenn es zurück-Referenz ist Vielen Dank, wie ich es heute fertig und ich dachte zu auswählen und diese Daten ausdrucken 5 Minuten dauern wird, und ich verbringe viel mehr Zeit darauf:/ – canimbenim