I'm using SQLAlchemy in Flask and I'm trying to map a relationship between one point and another, but can't figure it out myself and am looking for help.
I have Nodes that are physical things that only need to be defined once and then many instances of those Nodes can be put onto drawings. I have a set of tables like this: class Drawing(db.Model): __tablename__ = "drawing" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(63), unique=True, nullable=False) drawing_nodes = db.relationship('DrawingNode', back_populates="drawing", cascade="all, delete-orphan") class DrawingNode(db.Model): __tablename__ = "drawing_node" id = db.Column(db.Integer, primary_key=True) drawing_id = db.Column(db.Integer, db.ForeignKey('drawing.id'), nullable =False) node_id = db.Column(db.Integer, db.ForeignKey('node.id'), nullable=False ) x = db.Column(db.Integer, nullable=False) y = db.Column(db.Integer, nullable=False) __table_args__ = (db.UniqueConstraint('drawing_id', 'node_id', name= '_drawing_node_uc'),) node = db.relationship("Node", back_populates="drawing_node", lazy= "joined") drawing = db.relationship("Drawing", back_populates="drawing_nodes") class Node(db.Model): __tablename__ = 'node' id = db.Column(db.Integer, primary_key=True) parent_id = db.Column(db.Integer, db.ForeignKey('node.id'), default=None ) type = db.Column('type', db.String(50), nullable=False) __mapper_args__ = {'polymorphic_on': type, 'with_polymorphic': '*'} drawing_node = db.relationship('DrawingNode', back_populates="node", cascade="all, delete-orphan", lazy="dynamic") parent = db.relation('Node', remote_side=[id], backref=backref( "children", cascade="all,delete")) I can currently go from a Drawing to its DrawingNodes without issue and can go from DrawingNodes to their Nodes and back. I would like to do two things: 1. In DrawingNode, add "children" such that it will find the DrawingNode's Node, find that Node's children (through Node.parent_id), and then find those Nodes' DrawingNodes. I can accomplish this with the following postgres query, but can't figure out how to turn it into a SQLAlchemy statement: SELECT * from drawing_node AS dn_1 INNER JOIN node AS node_1 ON node_id=node_1.id INNER JOIN node AS node_2 ON node_1.parent_id=node_2.id INNER JOIN dn_1 AS dn_2 ON dn_2.node_id=node_2.id AND dn_2.drawing_id=dn_1. drawing_id WHERE dn_1.drawing_id=7; 2. In Drawing, modify "drawing_nodes" such that it also joins the information from that DrawingNode's Node in the relationship. I'm less concerned about this one because I think I'm missing something obvious and have a workaround, but I figured I'd ask while I'm here. Any help with this would be great. Thanks, SB -- 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. For more options, visit https://groups.google.com/d/optout.