you have every reason to be confused by that paragraph, which is using way too much terminology to express what's important there. at some point, we had to add a behavior which I thought would be confusing to people, so that paragraph tries badly to explain what it is. I should replace it with just a simple sentence and an example. Here's the example:
from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class A(Base): __tablename__ = 'a' id = Column(Integer, primary_key=True) bs = relationship("B") class B(Base): __tablename__ = 'b' id = Column(Integer, primary_key=True) a_id = Column(Integer, ForeignKey('a.id')) e = create_engine("sqlite://", echo=True) Base.metadata.create_all(e) sess = Session(e) a1 = A() b1 = B() a1.bs = [b1] sess.add(a1) sess.commit() a1.bs # refresh a1.bs sess.close() # close out - sess is no longer associated with a1, b1 # all new session sess2 = Session(e) a1.bs.remove(b1) sess2.add(a1) # b1 was removed from a1.bs, but # is in sess2 anyway! surprising! assert b1 in sess2 # because we need it for the flush, it's still here: from sqlalchemy import inspect print inspect(a1).attrs.bs.history.deleted On Mar 15, 2014, at 5:26 AM, Bao Niu <niuba...@gmail.com> wrote: > I've read this paragraph > (http://docs.sqlalchemy.org/en/latest/orm/session.html#unitofwork-cascades) > many many times and still can't think of a practical example of what is being > discussed. > > save-update cascade also cascades the pending history of the target > attribute, meaning that objects which were removed from a scalar or > collection attribute whose changes have not yet been flushed are also placed > into the target session. This is because they may have foreign key attributes > present which will need to be updated to no longer refer to the parent. > > I don't think my English is the main stumbling block here because I > understand the meaning of each word, but as soon as I'm putting them together > I'm completely lost. Could someone give a simple example here to illustrate > the main point in this paragraph please? Highly appreciated. Thanks. > > -- > 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. > For more options, visit https://groups.google.com/d/optout. -- 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. For more options, visit https://groups.google.com/d/optout.