I'm still fairly new at sqlalchemy, and am still occasionally being 
surprised by how sometimes-too-clever it is.  I ran into one of those 
moments today.

I have something that looks like this.  (All the tables are reflected.)

class Parent(Model, SimpleLookupTable):
    __table__ = Table('parent')
    # ....

class Child(Model):
    __table__ = Table('child')
    parent = relationship("Parent", lazy='joined', 
backref=backref('children', lazy='lazy'))
    # ....


As part of my program design, I'm sometimes creating a partially-populated 
Child() that serves as a 'template' for a child that might be created 
later, but isn't at this point.

template = Child(parent = parent)
do_lots_of_stuff()

I was a bit surprised to find that at this point, parent.children already 
contains the new Child().  This makes sense when thinking about it under 
normal circumstances... but in this particular case, I don't want this to 
be part of the collection until it's actually added to the session (which I 
can confirm it's not, I've tried both expunging and make_transient().

What's the best way to accomplish this?  The documented behavior of 
cascade_backrefs=False is almost, but not quite, what I need.  

-- Daniel Grace

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to