On Aug 25, 2011, at 7:06 PM, Benjamin Sims wrote: > Thanks for the help with my query the other day - as ever response was swift > and bang on. > > I'm now trying to set up another m:n relationship in ORM correctly. > Pseudocode: > > parentA.children.append(child1) > parentA.children.append(child2) > > parentB.children.append(child2) > > session.delete(parentA) > > At this stage, I would like child1 to be deleted and child2 to survive. > > However, if I use (cascade = "all"), then both children will be deleted when > ParentA is. I hoped that delete-orphan would be applicable in this situation, > but that requires that single-parent be True, which I understand it cannot > for a true many-to-many. > > So I guess what I am asking is - is it possible for child objects which have > still have remaining parents to survive, while deleting those with no parents > left?
That's not something supported by "delete, delete-orphan" cascade and its why the single_parent=True flag is required - so that users aren't misled into thinking it can work that way. You'd need to roll this using attribute events most likely. The potential expense is that you may have to emit SQL in order to load the full collection of "parents" for each "child" in order to detect the orphan condition (which is why SQLA doesn't support this automatically, it would be extremely inefficient implemented generically). -- 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 sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.