Please provide all mappings including the missing "Prestacion" class as well as exact information on which classes have their own tables or not. The code should be a mappings I can paste into a .py file and run to see the error you are getting.
On Mon, Sep 11, 2017 at 11:38 AM, Julio César Gázquez <julio_li...@mebamutual.com.ar> wrote: > Hi list. > > I guess I messed it. > > I built an app on the premise I can build two different relationships > relying on the same field. My data model is basically as below. Class > names are roughly translated from Spanish. Please read comments in > Charge subclasses to grasp the problem. > > class Affiliate(Base): > > id = Column(Integer, primary_key=True) > ... > > class AffiliateFamilyMember(Base) > affiliate_id = Column(Integer, primary_key=True) > family_member_no = Column(SmallInteger, primary_key=True) > > > class Charge(Base): > > id = Column(Integer, primary_key=True) > affiliate_id = Column(Integer, ForeignKey('socios.id'), nullable=False) > family_member_no = Column(SmallInteger) > > affiliate = relationship('Affiliate', > foreign_keys='Prestacion.affiliate_id') > family_member = relationship('AffiliateFamilyMember', > foreign_keys='[Prestacion.affiliate_id, > Prestacion.family_member_no]') > ... > > > # Charge has a lot of subclasses like those > class LoanCharge(Charge): > > # Only affiliates can have loans. > # affiliate attribute is set to the Affiliate instance > # family_member attribute has no sense in this case > ... > > > class PharmacyPurchase(Charge): > # Any family member of affiliates can do farmacy purchases. > # family_member is set to the AffiliateFamilyMember instance > # affiliate is a valid read-only attribute on persisted instances > # as Affiliate.id == AffiliateFamilyMember.affiliate_id > > > Being a bit awkward, It worked well and silently on SQLAlchemy 0.8.x and > 0.9.x. I went into production using 0.9.x. > > But when using 1.x versions I got: > > SAWarning: relationship 'Charge.family_member' will copy column > affiliate_family_members.affiliate_id to column > charges.affiliate_id, which conflicts with relationship(s): > 'Charge.affiliate' (copies affiliates.id to charges.affiliate_id). > Consider applying viewonly=True to read-only relationships, or > provide a primaryjoin condition marking writable columns > with the foreign() annotation. > > Besides being a warning, I'm not sure if this actually can broke > something (Some problems I got trying to use 1.0.x days made me think > so). So I tried to fix it, but it's not as easy as it seemed. > > The gist is that in certain Charge subclasses I need affiliate being a > regular relationship, in other subclasses I need affiliate being a > "viewonly" relationship. But as all subclasses share the same mapper, > relationships from different subclasses clash one with each other: > > SAWarning: relationship 'PharmacyPurchase.family_member will copy > column family_members.affiliate_id to column > charges.affiliate_id which conflicts with relationship(s): > 'LoanCharge.affiliate' (copies affiliates.id to charges.affiliate_id). > Consider applying viewonly=True to read-only relationships, or > provide a primaryjoin condition marking writable columns > with the foreign() annotation. > > I'm not sure there is really a solution, besides using separate fields > for both relationships, as that should be an endeavor I'd rather avoid. > > Any suggestions? > > Thanks in advance. > > Greetings. > > Julio. > > -- > 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. -- 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.