I've found this function that can probably help you def clear_mappers() Remove all mappers that have been created thus far. The mapped classes will return to their initial "unmapped" state and can be re-mapped with new mappers.
On Sep 10, 7:41 pm, [EMAIL PROTECTED] wrote: > hi > is there an official way to undo creation and setup of a complex > object? esp. its relations... > > lets say there is A with references and collections and many2manys. > > def setup(): > my_b = query(B).first() > my_X = query(X).first() > > a = A() #in case of creating_new > a.name = 'abc' > a.b_ref = my_b > a.c_ref = C(name=cc) > a.d_ref = D(name=dd) > a.assoc_X.append( my_X) > return a > > and now the above has to be cancelled. > > we have invented this way to do it, but it is not at all obvious (yes > there is only one session staying): > > def cancel( obj, creating_new =True): > updating = not creating_new > if updating: > session.expire( obj) > else: > for k in references_created_new( obj): #should walk c_ref, d_ref > session.expunge( getattr(obj, k) ) > session.expunge( obj) > > the test is that after > a=setup() > cancel( a, True) > session.flush() should do nothing. > > i could not make it with anything less than this to work. maybe > there's even more to it... > it's not clear in references_created_new() how to distinguish the refs > to existing persistent objects from just-created not-yet-persistent > ones - maybe checking in session.new or what.. > > ciao > svilen --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" 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/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---
