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 [email protected].
> 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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/de75f770-73f0-42ac-84c6-7caeef218ab5%40www.fastmail.com.