Multi-level polymorphism is not supported.  See
https://bitbucket.org/zzzeek/sqlalchemy/issues/2555/cascading-polymorphic-ons
which includes an example of how to get multi-level polymorphic by
using a single polymorphic_on value, using COALESCE.
On Wed, Nov 7, 2018 at 4:45 AM <ai.research...@gmail.com> wrote:
>
> Hi all
>
> I have a phone table in MySQL which has morphology based on its two columns, 
> "is_deleted" and "is_active"
>
> If "is_deleted" column is 1, then we don't care about "is_active" column.
> If "is_deleted" column is 0, it means that the phone exists and can be either 
> active or inactive based on "is_active" column
>
> What I have read, looks like this:
>
>
>
> class FullPhone(Base):
>     __tablename__ = 'phone'
>
>     is_deleted = Column(TINYINT, nullable=False, server_default='0')
>
>     __mapper_args__ = {
>         'polymorphic_identity': 1,
>         'polymorphic_on': is_deleted
>     }
>
>
> class ExistingPhone(FullPhone):
>     is_active = Column(TINYINT, server_default='1')
>
>     __mapper_args__ = {
>         'polymorphic_identity': 0,
>         'polymorphic_on': is_active
>     }
>
>
> class ActivePhone(ExistingPhone):
>     __mapper_args__ = {
>         'polymorphic_identity': 1,
>     }
>
>
> class InactivePhone(ExistingPhone):
>     __mapper_args__ = {
>         'polymorphic_identity': 0,
>     }
>
>
>
> When I run this code, I got a warning:
>
> Reassigning polymorphic association for identity 0 from <Mapper at 
> 0x1173f0278 ---> to <Mapper at 0x1173f06d8; --->: Check for duplicate use of 
> 0 as value for polymorphic_identity.
>
>
>
>
> It seems that:
>
> the polymorphic identity '0' of "ExistingPhone" which is a condition on 
> "is_deleted" column
>
> is mistaken by:
>
> the polymorphic identity '0' of "InactivePhone" which is another condition on 
> "is_active" column
>
> I appreciate if someone can help me with this structure. Thank you.
>
> --
> 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.

Reply via email to