Hi there, Sorry, I've actually found the solution after I've posted my question again.
But I have to ask. I'm doing this in my relationships model: source_node = relationship("NodesModel", foreign_keys=[source_node_id]) target_node = relationship("NodesModel", foreign_keys=[target_node_id]) And removed this from the nodes model: relationships = relationship("RelationshipsModel", backref="nodes") My questions are: 1. The backref allows the linking of the 2 tables bidirectionally. Does the foreign_keys in the relationships model do the same thing? 2. Why do we not use the foreign_keys method to link all the tables instead of backref in the parent table? Thanks. Desmond On Wed, 29 May 2019 at 18:38, Desmond Lim <limwen...@gmail.com> wrote: > Hi Simon, > > I've read and I've tried a number of what is written but I still can't > solve it. > > I've done this: > > class RelationshipsModel(db.Model): > __tablename__ = 'relationships' > > source_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > target_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > strength = db.Column(db.Integer, nullable=False) > > source_node = relationship("NodesModel") > target_node = relationship("NodesModel") > > class NodesModel(db.Model): > __tablename__ = 'nodes' > > id = db.Column(db.BigInteger, primary_key=True) > project_uuid = db.Column(UUID(as_uuid=True), > db.ForeignKey('projects.uuid')) > name = db.Column(db.String(50), nullable=False) > size = db.Column(db.Integer, nullable=False) > > posts_nodes = relationship("PostsNodesModel", backref="nodes") > > Below are all that I"ve tried. > > ----- > > class RelationshipsModel(db.Model): > __tablename__ = 'relationships' > > source_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > target_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > strength = db.Column(db.Integer, nullable=False) > > source_node = relationship("NodesModel") > target_node = relationship("NodesModel") > > class NodesModel(db.Model): > __tablename__ = 'nodes' > > id = db.Column(db.BigInteger, primary_key=True) > project_uuid = db.Column(UUID(as_uuid=True), > db.ForeignKey('projects.uuid')) > name = db.Column(db.String(50), nullable=False) > size = db.Column(db.Integer, nullable=False) > > posts_nodes = relationship("PostsNodesModel", backref="nodes") > relationships_s = relationship("RelationshipsModel", > foreign_keys=["relationships.source_node_id"], backref="nodes") > relationships_t = relationship("RelationshipsModel", > foreign_keys=["relationships.target_node_id"], backref="nodes") > > ----- > > class RelationshipsModel(db.Model): > __tablename__ = 'relationships' > > source_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > target_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > strength = db.Column(db.Integer, nullable=False) > > class NodesModel(db.Model): > __tablename__ = 'nodes' > > id = db.Column(db.BigInteger, primary_key=True) > project_uuid = db.Column(UUID(as_uuid=True), > db.ForeignKey('projects.uuid')) > name = db.Column(db.String(50), nullable=False) > size = db.Column(db.Integer, nullable=False) > > posts_nodes = relationship("PostsNodesModel", backref="nodes") > relationships_s = relationship("RelationshipsModel", > foreign_keys=["relationships.source_node_id"], backref="nodes") > relationships_t = relationship("RelationshipsModel", > foreign_keys=["relationships.target_node_id"], backref="nodes") > > ----- > > class RelationshipsModel(db.Model): > __tablename__ = 'relationships' > > source_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > target_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > strength = db.Column(db.Integer, nullable=False) > > class NodesModel(db.Model): > __tablename__ = 'nodes' > > id = db.Column(db.BigInteger, primary_key=True) > project_uuid = db.Column(UUID(as_uuid=True), > db.ForeignKey('projects.uuid')) > name = db.Column(db.String(50), nullable=False) > size = db.Column(db.Integer, nullable=False) > > posts_nodes = relationship("PostsNodesModel", backref="nodes") > relationships_s = relationship("RelationshipsModel", > foreign_keys=["relationships.source_node_id"], backref="nodes") > relationships_t = relationship("RelationshipsModel", > foreign_keys=["relationships.target_node_id"], backref="nodes") > > I've also tried using > > relationships = relationship("RelationshipsModel", > foreign_keys="[NodesModel.source_node_id, > NodesModel.target_node_id]", > backref="nodes") > > Any other codes that I haven't tried? > > Desmond > > On Wed, 29 May 2019 at 17:30, Simon King <si...@simonking.org.uk> wrote: > >> On Wed, May 29, 2019 at 10:08 AM Desmond Lim <limwen...@gmail.com> wrote: >> > >> > Hi there, >> > >> > I'm been puzzling over this and still can't find answer. >> > >> > I have 2 tables: >> > >> > Nodes: >> > >> > class NodesModel(db.Model): >> > __tablename__ = 'nodes' >> > >> > id = db.Column(db.BigInteger, primary_key=True) >> > project_uuid = db.Column(UUID(as_uuid=True), >> db.ForeignKey('projects.uuid')) >> > name = db.Column(db.String(50), nullable=False) >> > size = db.Column(db.Integer, nullable=False) >> > >> > posts_nodes = relationship("PostsNodesModel", backref="nodes") >> > relationships = relationship("RelationshipsModel", backref="nodes") >> > >> > Relationships: >> > >> > class RelationshipsModel(db.Model): >> > __tablename__ = 'relationships' >> > >> > source_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), >> primary_key=True) >> > target_node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), >> primary_key=True) >> > strength = db.Column(db.Integer, nullable=False) >> > >> > I'm getting errors on this line: >> > >> > relationships = relationship("RelationshipsModel", backref="nodes") >> > >> > And I know it is because my Relationships table has the Nodes table as >> a foreign key twice. But I have not idea how do I create 2 relationships to >> the Relationships table? >> > >> >> I assume the error you are getting is something like "Could not >> determine join condition..."? In which case, you probably need this >> section of the docs: >> >> >> https://docs.sqlalchemy.org/en/13/orm/join_conditions.html#handling-multiple-join-paths >> >> Hope that helps, >> >> Simon >> >> -- >> SQLAlchemy - >> The Python SQL Toolkit and Object Relational Mapper >> >> http://www.sqlalchemy.org/ >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> description. >> --- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/sqlalchemy/CAFHwexczSoXe-GCrfDB%2BD6tisADXkz1EBqtjhyMz2La58tL7yw%40mail.gmail.com >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAM%2BCzagzkvG2fwY3VtZNQR_6gBQsUFvmxkr7pBDJAZmgpY1Feg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.