Hi Jeff,

This is an idea that we're aware of as well. If you could reserve the next
ID in advance, then you could actually do this in one put since multiple
entities could be sent in one batch :-) The workaround available now is to
use the key_name, but the difficulty becomes ensuring that the key_name is
unique. Here is a feature request which I'm aware of which is along these
lines (though the approach differs slightly):

http://code.google.com/p/googleappengine/issues/detail?id=1003

Thank you,

Jeff

2009/6/24 Jeff Enderwick <jeff.enderw...@gmail.com>

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