> The decision to allow setting key_names but not IDs is something we may
> revisit.

I hope that you're also considering some way to request and allocate
an unused id for a given path prefix.  (That way we can get unique key
ids to specify.)



On Jun 15, 4:45 pm, "Jeff S (Google)" <j...@google.com> wrote:
> Hi cryb,
>
> As you noted, we do not currently allow the ID for a key to be set, as we
> ensure that the ID is unique for each existing entity. I recommend using a
> key name instead of an ID, as Antoniov suggeted, if possible.
>
> It is technically possible to modify the key of an entity as it is being
> converted to a protocol buffer message before it is sent to the datastore.
> You could do this using hooks in the API proxy as described in this 
> article:http://code.google.com/appengine/articles/hooks.htmlAlso it is 
> possible to
> construct the key for the desired object if you know the ID in advance.
>
> class X(db.Model):
>   pass
>
> # If you've already created the entity so you have the ID.
> x_id = X().put().id()
>
> # Instead of getting by ID, you can create the key manually.
> k = db.Key.from_path('X', x_id)
>
> Now you have the desired key without having fetched the object, but the part
> which the model class does not allow is setting the key yourself. So you
> could modify the protocol buffer message before it is written to the
> datastore, but I don't recommend it.
>
> The decision to allow setting key_names but not IDs is something we may
> revisit.
>
> Happy coding,
>
> Jeff
>
> 2009/6/12 cryb <cbuti...@gmail.com>
>
>
>
>
>
> > Hi.. that is to build key names... What I asked was why I can't build
> > a key ID..
>
> > On Jun 12, 5:35 am, Antoniov <nio....@gmail.com> wrote:
> > > Use the code:
> > > s = Story(key_name="xzy123")
> > > Then you create an entity with the key name "xzy123".
>
> > > Check this:
> >http://code.google.com/intl/en-US/appengine/docs/python/datastore/key...
>
> > > On 6月12日, 上午1时28分, cryb <cbuti...@gmail.com> wrote:
>
> > > > Does anyone know why it is possible to build a key name but NOT a key
> > > > id? I know key IDs are used as autoincrements, but why can't I just
> > > > override this mechanism and build my own key id?
> > > > Suppose I want to overwrite an existent entry in my table that has a
> > > > key id I know, and also I want to keep that key id after update...
> > > > because I can't just build a key id, I am forced to fetch that entity,
> > > > modify it and write it back, instead of just write the updated entity
> > > > with the key id I already know - so an additional read to the
> > > > datastore.
> > > > Is there an obscure reason for that? (both key names and key ids are
> > > > prefixed with appid/kind as far as I know so there is no chance of
> > > > collision with other apps/kinds)- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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