Hey Jeff - sorry for the confusion. The idea was that one would be
able to get the unique id from an GOOG and then do a db.put with that
id as an arg. For example, let's say I want to create two entities,
with each referring to each other. I need to do three db.put
operations:

a = Foo()
db.put(a)
b = Foo()
b.ref = a.key()
db.put(b)
a.ref = b.key()
db.put(a)

One would hope to be able to do this with two db.puts.

Thanks,
Jeff


2009/6/16 Jeff S (Google) <j...@google.com>:
>
> The datastore does not allow key_names which begin with a digit in
> order to avoid confusion with an ID, which is numerical. If you want
> to use numeric key names, you could add a one letter prefix :-)
>
> Happy coding,
>
> Jeff
>
> On Jun 16, 1:17 am, cryb <cbuti...@gmail.com> wrote:
>> Hi Jeff.
>> Thanks for your reply.. I really hope that in the near future
>> appengine will support setting key ids for entities.
>> You mentioned that I can use hooks in order to achieve my goal..
>> However I was more interested in a solution based on appengine java
>> sdk, and not on python hooks. Does appengine java sdk provide hooks or
>> some other similar mechanism?
>> It seems that for the moment I'll stick to generating key names.
>> One more question: I've tried to generate some entities with key names
>> on my local devappserver and I got a strange exception stating that I
>> can't create key names that start with a digit (?!?)... this holds on
>> google appengine production servers too or it's just a "bug" of
>> devappserver?
>>
>> Thanks
>>
>> On Jun 16, 2:45 am, "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.htmlAlsoit 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)
> >
>

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