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.

Reply via email to