I recently started to use ZODB and python as my chosen database solution. I am having a few problems with retaining changes in BTrees. I have read the documentation and am aware of the _p_changed attribute. Still, here is what I observe:

############################
# consider this simplified example
# lets ignore the open database method for now.
T = OOBTree()

# my trees contain integers as keys and sets as values
T.update({1:set([1,2,3]), 2:set([5,6,7])})

# I would really really like this to work
T[1].add(6)
T._p_changed = True
get_transaction().commit()

# but it doesn't.
# changes are not saved when I close the database and reopen it

# This works:
T[1].add(6)
T.update({1:T[1]})
############################

The thing is my sets tend to be very big and I am not sure but I think that using T.update({1:T[1]}) will slow me down since a dictionary is first created with a copy of the set which is very big and then the OOBTree is updated. Or am I wrong here? Can anyone suggest an efficient way that will not require a copy of the set already stored in T[1]?

Thanks for the help,
Yair


_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )

Reply via email to