Thank you very much! I'll test it ASAP :)
2012/2/8 Michael Bayer <[email protected]> > I have good news on this front, in that I've nailed down how this will > work, including a patch that gets this basic thing working as a proof of > concept. However, the issue of being able to distinguish "remote" and > "foreign" in a binary expression where a column points to itself can > benefit from moving completely to the newer concept I'm working on, which > is different enough that I think it should be for the next major SQLAlchemy > release (currently it's called 0.8). I'll keep the ticket updated with > progress reports. > > > On Feb 1, 2012, at 10:49 AM, Michael Bayer wrote: > > This is essentially ticket #1401 and I've attached this there as well as > moved up the priority, however this issue is extremely complicated and > would require some serious rethinking of the relationship()'s inner > workings. It would take several days to come up with a general solution > so I can't give you a fix for this right now. > > http://www.sqlalchemy.org/trac/ticket/1401 > > > > > On Feb 1, 2012, at 5:40 AM, Pau Tallada wrote: > > Hi! > > I have a table with a self-reference of two columns that represents a tree > structure. > I was trying to build an outerjoin to select all the nodes have children > but NO grandchildren, but the SQL constructed was incorrect, as it was not > aliasing properly one of the columns. > > note_t Table('node_t', metadata, > Column('id', Integer, primary_key=True), > Column('project_id', Integer), > Column('parent_id', Integer), > sa.ForeignKeyConstraint( > ['project_id', 'parent_id'], > ['node_t.project_id', 'node_t.id])) > > mapper(Node, node_t, properties= { > 'children' : relationship(Node, > remote_side=[note_t.c.id, node_t.c.project_id] > ) > }) > > *print str(session.query(Node).outerjoin(Node, Node.children, > aliased=True)))* > > Generated (simplified): > SELECT node.id, node.project_id, node.parent_id > FROM node > LEFT OUTER JOIN node AS parent ON node.parent_id = parent.id > AND node.project_id = *node*.project_id > > Expected: > SELECT node.id, node.project_id, node.parent_id > FROM node > LEFT OUTER JOIN node AS parent ON node.parent_id = parent.id > AND node.project_id = *parent*.project_id > * > * > Making the join condition explicit generates the correct SQL > *Parent = aliased(Node)* > *print str(session.query(**Node**).outerjoin(**Parent**, (Node.parent_id > == Parent.id) & (Node.project_id == Parent.project_id)))* > * > * > I have attached a small test file (test.py) that shows this behaviour and > is based on one of your tests suites (test_relationships). > > Thanks in advance! > > Pau. > -- > ---------------------------------- > Pau Tallada Crespí > Dep. d'Astrofísica i Cosmologia > Port d'Informació Científica (PIC) > Tel: +34 93 586 8233 > ---------------------------------- > > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > <test.py> > > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > 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 [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- ---------------------------------- Pau Tallada Crespí Dep. d'Astrofísica i Cosmologia Port d'Informació Científica (PIC) Tel: +34 93 586 8233 ---------------------------------- -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
