saying : rel.info = info
implies that you are also saying: info.rels.append(rel) since "info" is saved to the database, and therefore can have any number of Relation objects already in its "rels" collection, how might SA properly append to the list without first lazily retreiving its currently saved value ? recall that we agreed that lazy loaders require the instance being associated with a Session. On Jul 17, 2006, at 1:56 PM, dmiller wrote: > Add this test case to LazyTest in test/orm/lazytest1.py > > def test_lazy_backref(self): > class Information(object): > pass > > class Relation(object): > pass > > session = create_session() > > mapper(Relation, rel_table) > mapper(Information, info_table, properties={ > 'rels': relation(Relation, backref="info") > }) > > info = session.query(Information).get(1) > session.expunge(info) > > rel = Relation() > rel.info = info # FAILS!! > > session.save(rel) # NEVER GOT HERE... > > > Test result using SA r1712: > > ====================================================================== > ERROR: test_lazy_backref (__main__.LazyTest) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "test/orm/lazytest1.py", line 106, in test_lazy_backref > rel.info = info > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/attributes.py", line 26, in __set__ > self.set(None, obj, value) > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/attributes.py", line 190, in set > ext.set(event or self, obj, value, old) > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/attributes.py", line 444, in set > getattr(child.__class__, self.key).append(event, child, obj) > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/attributes.py", line 222, in append > self.get(obj).append_with_event(value, event) > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/attributes.py", line 137, in get > l = InstrumentedList(self, obj, self._adapt_list(callable_()), > init=False) > File "/Users/dmiller/Code/PyOE/resources/lib/SQLAlchemy/lib/ > sqlalchemy/orm/properties.py", line 370, in lazyload > raise exceptions.InvalidRequestError("Parent instance %s is not > bound to a Session; lazy load operation of attribute '%s' cannot > proceed" % (instance.__class__, self.key)) > InvalidRequestError: Parent instance <class '__main__.Information'> > is not bound to a Session; lazy load operation of attribute 'rels' > cannot proceed > > ---------------------------------------------------------------------- > > > > It seems unintuitive that I can't set the rel.info attribute with a > disconnected Information instance even though they are both (i.e. rel > and info) disconnected from the session. Ideally it would not throw > an exception even on session.save(rel). Is this by design? > > ~ Daniel > > > > ---------------------------------------------------------------------- > --- > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your > job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Sqlalchemy-users mailing list > Sqlalchemy-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Sqlalchemy-users mailing list Sqlalchemy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users