the argument you're looking for is inherit_condition:

https://docs.sqlalchemy.org/en/13/orm/mapping_api.html#sqlalchemy.orm.mapper.params.inherit_condition


class Foo(...):
   __mapper_args__ = {
      "inherit_condition": node_id == Node.node_id
   }



On Fri, Aug 28, 2020, at 1:45 PM, Richard Damon wrote:
> Following code and error I am getting:
> 
> 
> class Base:
>     """Base Class for SQLAlchemy ORM Classes"""
>     @declared_attr
>     def __tablename__(cls):
>         """Default the Table Name to the Class Name"""
>         return cls.__name__
> 
> 
> Base = declarative_base(cls=Base)
> 
> 
> class Node(Base):
>     """Class represents the base of the User Data types."""
> 
>     node_id = Column(Integer, primary_key=True)
>     type_name = Column(String(255), nullable=False)  # todo should come
> from type_id
> 
>     __mapper_args__ = {
>         'polymorphic_identity': 'Node',
>         'polymorphic_on': type_name,
>     }
> 
> 
> class Property(Node):
>     """Class represents a Node providing information about another Node"""
>     node_id = Column(Integer, ForeignKey('Node.node_id'), primary_key=True)
>     ref_id = Column(Integer, ForeignKey('Node.node_id'))
> 
>     __mapper_args__ = {
>         'polymorphic_identity': 'Property',
>     }
> 
> Error:
> 
> sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between
> 'Node' and 'Property'; tables have more than one foreign key constraint
> relationship between them. Please specify the 'onclause' of this join
> explicitly.
> 
> 
> Other classes driving from node don't have this issue, but then they
> don't have that second foreign key back to node. Can't figure out how to
> sepecify the onclause, since I don't explicitly give the join., and my
> searching-foo isn't finding anything on this. I suspect somewhere,
> likely in the __mapper_args__ I need to specify the field to join on,
> but can't find it.
> 
> 
> On a somewhat related note, for purposes of DRY, since all of the
> subclasses have the same node_id declaration, and basically the same
> __mapper__ is there a way I can add this to Node to push this into the
> subclasses? Would I use a @declared_attr, which would need to check if
> the type was Node since it is different?
> 
> (Background, long time programmer, but somewhat new to python, looking
> to learn how with reasons, not just rote recipes to follow)
> 
> -- 
> Richard Damon
> 
> -- 
> 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/bd6dcf30-f6ee-308d-284f-14aeef4505ae%40Damon-Family.org.
> 

-- 
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/de75f770-73f0-42ac-84c6-7caeef218ab5%40www.fastmail.com.

Reply via email to