On Jul 22, 4:51 pm, Michael Bayer <[EMAIL PROTECTED]> wrote: > On Jul 22, 2008, at 6:50 AM, Erez wrote: > > > > > > > > > Hi, > > I apologize in advance if this is a newbie question, but this is > > pretty wierd and I couldn't find an answer in the docs. > > > I have these two "tables": > > > class Node(Base): > > __tablename__ = 'nodes' > > > id = Column(Integer, primary_key=True) > > name = Column(String) > > > class Link(Base): > > __tablename__ = 'links' > > > node_id = Column(Integer, ForeignKey('nodes.id')) > > > id = Column(Integer, primary_key=True) > > type = Column(String) > > fro = relation(Node, order_by=Node.id, backref="links_out") > > to = relation(Node, order_by=Node.id, backref="links_in") > > > Just to clarify, I want each link to appear in the "links_out" of its > > from-node, and in the links_in of it's to-node. > > > This works just fine when I create the classes, but once I commit the > > changes into a session, everything gets messed up (maybe the links_in > > and links_out aren't seperated as I would expect). > > > A quick example: > >>>> sqlalchemy.__version__ > > '0.5.0beta2' > >>>> cat = Node() > >>>> cat.name = "cat" > >>>> animal = grm.Node() > >>>> animal.name = "animal" > >>>> link = Link() > >>>> link.type = "is a" > >>>> link.fro = cat > >>>> link.to = animal > >>>> link > > #cat >is a> #animal > >>>> session.add(cat) > >>>> session.add(animal) > >>>> session.add(link) > >>>> session.commit() > >>>> link > > #animal >is a> #animal > > you have only one foreign key to the "nodes" table, but two > relations. How can a single row in "links" maintain two separate > references to both "fro" and "to" ?
So how would you solve it? I tried defining two foriegn keys: class Link(Base): __tablename__ = 'links' node_id = Column(Integer, ForeignKey('nodes.id')) node_id2 = Column(Integer, ForeignKey('nodes.id')) id = Column(Integer, primary_key=True) type = Column(String) fro = relation(Node, order_by=node_id, backref="links_out") to = relation(Node, order_by=node_id2, backref="links_in") but got: sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/ child tables on relation Link.fro. Specify a 'primaryjoin' expression. If this is a many-to-many relation, 'secondaryjoin' is needed as well. Is a primaryjoin necessary then? I've tried to look-up the solution, but couldn't find any. Thanks! --~--~---------~--~----~------------~-------~--~----~ 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?hl=en -~----------~----~----~----~------~----~------~--~---