that's very likely to be a bug related to the new unit of work. I've added #1807 which is on a high priority 0.6.1 track, will try to get it in before 0.6.1 release.
On May 19, 2010, at 3:34 PM, Brad Wells wrote: > In upgrading to 0.6.0 I've found a regression in behavior for > relationships with backrefs that require post_update=True. > > from sqlalchemy import Table, Column, Integer, String, MetaData, > create_engine, ForeignKey, ForeignKeyConstraint > from sqlalchemy.orm import relation, sessionmaker, scoped_session, > synonym, object_session, mapper, backref > > engine = create_engine('sqlite:///', echo=False) > > Session = scoped_session(sessionmaker(autoflush=True, > autocommit=False, bind=engine)) > metadata = MetaData() > > contacts = Table('contacts', metadata, > Column('id', Integer, primary_key=True), > Column('name', String(35)), > Column('account_id', Integer), > ForeignKeyConstraint(['account_id'], ['accounts.id'])) > > accounts = Table('accounts', metadata, > Column('id', Integer, primary_key=True), > Column('name', String(35)), > Column('created_by_id', Integer), > ForeignKeyConstraint(['created_by_id'], > ['contacts.id'], name='fk1', use_alter=True)) > > class Contact(object): pass > class Account(object): pass > > mapper(Contact, contacts, properties={ > 'account': relation(Account, > > primaryjoin=contacts.c.account_id==accounts.c.id, > post_update=True, > #backref=backref('contacts', post_update=True) > backref='contacts' > ) > }) > mapper(Account, accounts, properties={ > 'created_by': relation(Contact, > primaryjoin=accounts.c.created_by_id==contacts.c.id), > #'contacts': relation(Contact, > primaryjoin=accounts.c.id==contacts.c.account_id) > }) > > metadata.create_all(bind=engine) > > # create basic data > frank = Contact() > frank.name = "Frank" > Session.add(frank) > > finc = Account() > finc.name = "Frank Inc." > frank.account = finc > Session.add(finc) > > Session.commit() > Session.expunge_all() > > # reproduce the problem > bob = Contact() > bob.name = 'Bob' > Session.add(bob) > > frank = Session.query(Contact).filter_by(name='Frank').first() > finc = frank.account > > bob.account = finc > > assert bob.account == finc > Session.commit() > assert bob.account == finc > > If either backref on the 'account' relation of Contact is set then the > UPDATE fails to issue. If the 'contacts' relation is defined directly > on Account or the backref isn't defined at all then everything works > as expected. This is tested on SQLAlchemy 0.6.0 with Python 2.6. I > verified this as working under 0.5.8. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@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. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.