I second that. I have cases where I'm building a structure of multiple
objects, and I have to do a put() just to get the id, and then I need
to do another put() to the same object later on. Eliminating the 2nd
put() of the same object in the flow would also allow me to wrap it in
a transaction.

2009/6/16 Andy Freeman <ana...@earthlink.net>:
>
>> 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