Okay let me answer my own question. The problem is that my parent-child relationship does not have the delete-orphan cascade. So when I set the new children, the old child_2 loses its parent (as is expected, because it's no longer a child) and then there's an error because the DB has a not null constraint on the parent_pk coming from nullable=False.
I guess the moral of the story is that parent_pk being non-nullable essentially requires delete-orphan. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- 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 https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.