use backref=backref(somename, lazy=False, <otherargs>).
On Oct 23, 2006, at 8:19 AM, Maciej Szumocki wrote: > > After some more testing (the use of loggers in sqlalchemy helped alot > :)) i have narrowed the issue to backreference creation - they seem to > be always created lazy, even if relation is set to eager. Here's a > simple test script (not in unittest format unfortunately as i'm not > sure how to make one that would work within sqlalchemy unittest > framework). > > from sqlalchemy import * > dburi = "put your own here" > > import logging > #logging.getLogger("sqlalchemy.orm.mapper.Mapper").setLevel(1) > #logging.getLogger("sqlalchemy.orm.strategies.EagerLoader").setLevel > (1) > #uncomment if you want to see what exactly is going on > > engine = create_engine(dburi, strategy='plain', echo=True) > metadata = BoundMetaData(engine) > > middle = Table('middle', metadata, > Column('id', Integer, primary_key = True, autoincrement=True), > Column('data', String(50)), > ) > > left = Table('left', metadata, > Column('id', Integer, ForeignKey(middle.c.id), primary_key=True), > Column('tag', String(50), primary_key=True), > ) > > right = Table('right', metadata, > Column('id', Integer, ForeignKey(middle.c.id), primary_key=True), > Column('tag', String(50), primary_key=True), > ) > > class Middle(object): > def __init__(self, data): self.data = data > class Left(object): > def __init__(self, data): self.tag = data > class Right(object): > def __init__(self, data): self.tag = data > > mapper(Left, left) > mapper(Right, right) > mapper(Middle, middle, properties = { > 'left': relation(Left, private=True, lazy=False, backref='middle', > foreignkey=left.c.id, primaryjoin = left.c.id==middle.c.id ), > 'right': relation(Right, private=True, lazy=False, > backref='middle', > foreignkey=right.c.id, primaryjoin = right.c.id==middle.c.id > ), > } > ) > > def make_data(): > session = create_session(bind_to=engine) > p = Middle('test1') > p.left.append(Left('tag1')) > p.right.append(Right('tag2')) > session.save(p) > session.flush() > > def test(close_session): > session = create_session(bind_to=engine) > obj = session.query(Left).get_by(tag='tag1') > if close_session: > session.close() > print obj.middle.right[0] > > if __name__=="__main__": > metadata.create_all() > try: > make_data() > test(False) # will work fine > test(True) # will fail > finally: > metadata.drop_all() > > > > --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy -~----------~----~----~----~------~----~------~--~---