well thats my contribution for today, this is mostly rewritten: http://sqlalchemy.readthedocs.org/en/rel_0_9/orm/session.html#cascades
On Mar 15, 2014, at 12:07 PM, Gery . <[email protected]> wrote: > I also appreciate such example! Hope simple terminology with a simple example > can replace the sometimes complicated documentation. > > Sent from my i386 > > On Mar 15, 2014, at 16:31, "Michael Bayer" <[email protected]> wrote: > > 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 <[email protected]> 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 [email protected]. >> To post to this group, send email to [email protected]. >> 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 [email protected]. > To post to this group, send email to [email protected]. > 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 [email protected]. > To post to this group, send email to [email protected]. > 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
