Hi Stephen, Your supposition is correct: App Engine will perform a fetch the first time a ReferenceProperty is resolved, even if that entity has already been fetched by resolving other ReferenceProperties in the same request.
You can work around this by using EntityClass.properties()['myprop'].get_value_for_datastore(myinstance) to get the key the ReferenceProperty refers to. -Nick Johnson On Sat, Jun 6, 2009 at 3:03 PM, Stephen Mayer <stephen.ma...@gmail.com>wrote: > > Hi All, > > According to the docs: > > http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#ReferenceProperty > > The example given looks like this: > === > class Author(db.Model): > name = db.StringProperty() > > class Story(db.Model): > author = db.ReferenceProperty(Author) > > story = db.get(story_key) > author_name = story.author.name > === > > So am I assuming correctly that the above example would represent two > "get" requests from the database? The first would be when the db.get > is performed ... and the second in a lazy manner if story.author is > referenced? > > So if i have multiple rows from db.get ... and all of the results > reference the same "parent" model, and if i use that field from the > result set it will end up doing n(o) operations, even if all stories > have the same author: > > stories = db.GqlQuery("SELECT * FROM Story") > for story in stories: > author_name = story.author.name > > 1) get all stories > 2) get story author for story 1 > 3) get story author for story 2 > 4) get story author for story n > > Is this correct? Or does the DataStore do just 2 queries for the code > listed above (caching referenced data that is referenced by multiple > rows in a result set): > > 1) get all stories > 2) get story author for story 1 > 3) reuse result from story 1 since story 2 uses same result > > The answer to this question is very important to me in designing a > data structure. Appreciate any input I can get on this! > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---