you should read the section here:

http://code.google.com/appengine/docs/python/datastore/functions.html#run_in_transaction

where they show an example of iterating a counter in a transaction.

If you don't already know the key for the object... then you sort of need to
get it to run your transaction.  In the decrement example, they grab the
entity first so that they can send the entity key to the decrement function.

Now, if you want to modify their decrement function to see if it works by
getting the key inside of the transaction..  then just try that.. it's only
a few lines of code.

On Sat, Nov 14, 2009 at 10:29 PM, Will <[email protected]> wrote:

> I want to find that particular entity, change it and save it back. When one
> request is doing this, I don't want another request pick up the same entity
> and modify it again. In short, I want the 'seek-change-save' to be
> serialized, as one reason the GAE transaction is designed for. Finding out
> the key of the entity first out of a transaction and then using the key
> inside the transaction defeats the purpose.
>
> Will
>
>
> On Sat, Nov 14, 2009 at 1:24 PM, 风笑雪 <[email protected]> wrote:
>
>> Why you need a transaction to update just one entity? Just save it and
>> you may get an exception when update failed.
>>
>> BTW, DateTimeProperty has an parameter auto_now, you can use it to
>> automatic update its time by datastore.
>>
>> And if you really want a transaction, you need fetch it before start
>> the transaction:
>>
>> item = C1.gql("WHERE p1 = :a AND p2 < :b ORDER BY p2", a = None, b =
>> today).get()
>> if item:
>>  key = item.key()
>>  def update_time(key)
>>    item = C1.get(key)
>>    if item:
>>       item.p1 = now
>>      item.put()
>>   db.run_in_transaction(update_time, key)
>>
>> 2009/11/14 Will <[email protected]>:
>> > Yes, I've read the document. I'm looking for some examples.
>> >
>> > As I said, I have a class, C1, whose entities have no ancestors. I want
>> to
>> > query a particular entity from it, modify, and put it back, for example,
>> >
>> > item = C1.gql("WHERE p1 = :a AND p2 < :b ORDER BY p2", a = None, b =
>> > today).fetch(1)
>> > item.p1 = now
>> > item.put()
>> >
>> > Both p1 and p2 are datetime. How can I build this into a transaction? Is
>> > there a way I can give the entities a 'place holder' ancestor so I can
>> later
>> > use an 'ancestor filter' in the query to satisfy the requirement?
>> >
>> > Thanks,
>> >
>> > Will
>> >
>> >
>> > On Fri, Nov 13, 2009 at 9:44 PM, Stephen <[email protected]> wrote:
>> >>
>> >> On Nov 13, 2:27 am, Will <[email protected]> wrote:
>> >> >
>> >> > Can you give me some examples of 'ancestor queries'? If possible, I'd
>> >> > like
>> >> > to change the existing ones into 'ancestor queries' and fit the whole
>> >> > into a
>> >> > transaction, because that is exactly what a transaction designed for.
>> >>
>> >>
>> >>
>> >>
>> http://code.google.com/appengine/docs/python/datastore/transactions.html#What_Can_Be_Done_In_a_Transaction
>> >>
>> >> --
>> >>
>> >> You received this message because you are subscribed to the Google
>> Groups
>> >> "Google App Engine" group.
>> >> To post to this group, send email to [email protected]
>> .
>> >> To unsubscribe from this group, send email to
>> >> [email protected]<google-appengine%[email protected]>
>> .
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/google-appengine?hl=.
>> >>
>> >>
>> >
>> > --
>> >
>> > You received this message because you are subscribed to the Google
>> Groups
>> > "Google App Engine" group.
>> > To post to this group, send email to [email protected].
>> > To unsubscribe from this group, send email to
>> > [email protected]<google-appengine%[email protected]>
>> .
>> > For more options, visit this group at
>> > http://groups.google.com/group/google-appengine?hl=.
>> >
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<google-appengine%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine?hl=.
>>
>>
>>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=.
>

--

You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=.


Reply via email to