On Nov 17, 2006, at 8:10 AM, Paolo Losi wrote: > Hi all, > > I'm using with great satisfaction Durus... > > There are however a couple of use cases that I cannot > still handle effectively... > > Is there any suggestion? > > 1. DB Bulk data modification. > > I want to find all objects of type FOO > and I want to rename a property without leveraging > object graph structures (just to be sure that I do not > miss any). from durus.connection import gen_every_instance for foo_instance in gen_every_instance(my_connection, FOO): foo_instance.new_name = foo_instance.old_name del foo_instance.old_name my_connection.commit() > > 2. Data migration between two Durus instances. > > I have identical object graph structures in two different > databases. I want to get all object in a btree structure > on DB "A" and copy them to btree structure on DB "B"... If you have a structure that contains no references to any persistent instances outside of the structure, there is a clever way to do this. I learned about it from Andrew Kuchling. #initialize connection_to_old and connection_to_new from cPickle import dumps, loads btree = connection_to_old.get_root()['x'] giant_pickle = dumps(btree_in_old, 2) new_btree = loads(giant_pickle) connection_to_new.get_root()['x'] = new_btree connection_to_new.commit() # Note that new oids are assigned to the new_btree objects # when they are committed. Make sure that your application does # not depend on specific oid values. # If necessary, run pickle with output to a file instead of # using a string. > > 3. Human readable import/export (XML,JSON) format > > This would be great and would allow solving also problem > 1 e 2... This doesn't do quite what you like, but it might be helpful for me to point out. from pickletools import dis from cStringIO import StringIO def readable_representation(obj): pickle = connection.get_stored_pickle(obj._p_oid) s = StringIO() dis(pickle, s) return s.getvalue() If someone has an inverse for dis, then you could use it similarly for import.