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
-~----------~----~----~----~------~----~------~--~---

Reply via email to