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 sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to