Digging up an old thread about data migration between two durus instances, what if your structure does have references to other Persistent objects? Is there a reasonably simple process that preserves the references? Thanks. Dave ------ David K. Hess Verscend Technologies, Inc. dhess@verscend.com 214-684-5448 On Nov 17, 2006, at 8:39 AM, David Binger wrote: > > 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. > > _______________________________________________ > Durus-users mailing list > Durus-users@mems-exchange.org > http://mail.mems-exchange.org/mailman/listinfo/durus-users