I have looked at the couple examples in the docs (many-to-many, and association table) and have noticed that my codebase has a slightly different pattern which is causing warnings when upgrading to 1.4. I'm trying to figure out the best pattern to accomplish what I've been doing which doesn't match the docs exactly.
In the below example you can see that there are backrefs on all of the links, and that there are backrefs from the link table to the related objects, as well as a secondary link from Parent to Child via Parent.children and Child.parents. There seem to be several options and I'm struggling to figure out what the solution should be to maintain the behavior with all of the following relationships working: - Parent.children - Parent.child_links - Child.parents - Child.parent_links - Association.parent - Association.child Code and warnings are below: from sqlalchemy import Column, ForeignKey, String, Integer from sqlalchemy.orm import configure_mappers, relationship from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Association(Base): __tablename__ = 'association' left_id = Column(ForeignKey('left.id'), primary_key=True) right_id = Column(ForeignKey('right.id'), primary_key=True) extra_data = Column(String(50)) parent = relationship('Parent', backref='child_links') child = relationship('Child', backref='parent_links') class Parent(Base): __tablename__ = 'left' id = Column(Integer, primary_key=True) children = relationship('Child', secondary=Association.__table__, backref='parents') class Child(Base): __tablename__ = 'right' id = Column(Integer, primary_key=True) configure_mappers() foo.py:25: SAWarning: relationship 'Child.parents' will copy column right.id > to column association.right_id, which conflicts with relationship(s): > 'Association.child' (copies right.id to association.right_id), > 'Child.parent_links' (copies right.id to association.right_id). If this > is not the intention, consider if these relationships should be linked with > back_populates, or if viewonly=True should be applied to one or more if > they are read-only. For the less common case that foreign key constraints > are partially overlapping, the orm.foreign() annotation can be used to > isolate the columns that should be written towards. To silence this > warning, add the parameter 'overlaps="child,parent_links"' to the > 'Child.parents' relationship. (Background on this error at: > https://sqlalche.me/e/14/qzyx) > configure_mappers() > foo.py:25: SAWarning: relationship 'Child.parents' will copy column > left.id to column association.left_id, which conflicts with > relationship(s): 'Association.parent' (copies left.id to > association.left_id), 'Parent.child_links' (copies left.id to > association.left_id). If this is not the intention, consider if these > relationships should be linked with back_populates, or if viewonly=True > should be applied to one or more if they are read-only. For the less common > case that foreign key constraints are partially overlapping, the > orm.foreign() annotation can be used to isolate the columns that should be > written towards. To silence this warning, add the parameter > 'overlaps="child_links,parent"' to the 'Child.parents' relationship. > (Background on this error at: https://sqlalche.me/e/14/qzyx) > configure_mappers() > foo.py:25: SAWarning: relationship 'Parent.children' will copy column > left.id to column association.left_id, which conflicts with > relationship(s): 'Association.parent' (copies left.id to > association.left_id), 'Parent.child_links' (copies left.id to > association.left_id). If this is not the intention, consider if these > relationships should be linked with back_populates, or if viewonly=True > should be applied to one or more if they are read-only. For the less common > case that foreign key constraints are partially overlapping, the > orm.foreign() annotation can be used to isolate the columns that should be > written towards. To silence this warning, add the parameter > 'overlaps="child_links,parent"' to the 'Parent.children' relationship. > (Background on this error at: https://sqlalche.me/e/14/qzyx) > configure_mappers() > foo.py:25: SAWarning: relationship 'Parent.children' will copy column > right.id to column association.right_id, which conflicts with > relationship(s): 'Association.child' (copies right.id to > association.right_id), 'Child.parent_links' (copies right.id to > association.right_id). If this is not the intention, consider if these > relationships should be linked with back_populates, or if viewonly=True > should be applied to one or more if they are read-only. For the less common > case that foreign key constraints are partially overlapping, the > orm.foreign() annotation can be used to isolate the columns that should be > written towards. To silence this warning, add the parameter > 'overlaps="child,parent_links"' to the 'Parent.children' relationship. > (Background on this error at: https://sqlalche.me/e/14/qzyx) > configure_mappers() Thanks! -- Michael -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAKdhhwGNLvZo3gF6h-PdWTkb%2BPDdzgq8avWC30oOWgu7%2BObTmQ%40mail.gmail.com.