[google-appengine] Re: Question about transactions and Entity Groups

2009-03-19 Thread djidjadji

Why do you need a transaction for this operation?
To create B objects that are children of some A  use

a=A()
a.put()  # create the parent object
bObjs = [B(parent=a, somestring=s) for s in somelist]
db.put(bObjs)

2009/3/19 Anonymous Coderrr greedw...@gmail.com:

 Hi,

 The documentation for entity-groups and transactions say that entities
 must all be in the same eneity group for transaction operations to
 work.  But it does not specifically say how to put entities in the
 same entity group, other than some mention of setting the same parent,
 which it also does not say how to do.

 Maybe someone could show me specifically how to do this?

 Let's say I have:

 class A(db.Model):
    bList = db.ListProperty(db.Key)

 class B(db.Model):
    someString = db.StringProperty()


 def tran(self, a, bList):
        bKeys = put_each_list_item_return_keys_as_list(bList) # this
 just calls put() on each item, returns keys
        a.bList = bKeys
        a.put()

 # the work
        bLIst = createListofBs()
        a  = A()
        db.run_in_transaction(tran, a, bList)

 If I run this, I get this error while the items in the bList are being
 put:

 BadRequestError: Cannot operate on different entity groups in a
 transaction: (kind=u'B', id=65L) and (kind=u'B', id=None).

 How do I get everything into one entity group so this transaction will
 commit?

 Thanks.

 


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



[google-appengine] Re: Question about transactions and Entity Groups

2009-03-19 Thread Anonymous Coderrr

Data integrity -  I want this to be atomic..   I do not want either A
or the list of B's saved if the other fails to save.

On Mar 19, 3:16 pm, djidjadji djidja...@gmail.com wrote:
 Why do you need a transaction for this operation?
 To create B objects that are children of some A  use

 a=A()
 a.put()  # create the parent object
 bObjs = [B(parent=a, somestring=s) for s in somelist]
 db.put(bObjs)

 2009/3/19 Anonymous Coderrr greedw...@gmail.com:





  Hi,

  The documentation for entity-groups and transactions say that entities
  must all be in the same eneity group for transaction operations to
  work.  But it does not specifically say how to put entities in the
  same entity group, other than some mention of setting the same parent,
  which it also does not say how to do.

  Maybe someone could show me specifically how to do this?

  Let's say I have:

  class A(db.Model):
     bList = db.ListProperty(db.Key)

  class B(db.Model):
     someString = db.StringProperty()

  def tran(self, a, bList):
         bKeys = put_each_list_item_return_keys_as_list(bList) # this
  just calls put() on each item, returns keys
         a.bList = bKeys
         a.put()

  # the work
         bLIst = createListofBs()
         a  = A()
         db.run_in_transaction(tran, a, bList)

  If I run this, I get this error while the items in the bList are being
  put:

  BadRequestError: Cannot operate on different entity groups in a
  transaction: (kind=u'B', id=65L) and (kind=u'B', id=None).

  How do I get everything into one entity group so this transaction will
  commit?

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