down votefavorite
<http://stackoverflow.com/questions/42918152/sqlalchemy-polymorphism-without-discriminators#>
I am trying to use an external library which defines a class model in my
own program. I want the classes I define to be the same in all respects to
their parents from the library, except that I want to append some helper
methods to my local extensions. For example:
*External Library:*
Base = declarative_base()class BaseUser(Base):
__tablename__ = 'user'
email = Column(String(100), nullable=False, unique=True)
password = Column(String(128), nullable=False)
address_uid = Column(Integer, ForeignKey('address.uid'))
address = relationship('BaseAddress', back_populates="users")
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.address = BaseAddress()
class BaseAddress(Base):
__tablename__ = 'address'
street = Column(String(100))
unit = Column(String(32))
city = Column(String(64))
state = Column(String(32))
postal = Column(String(32))
country = Column(String(32))
users = relationship('user', back_populates="address")
*Local model:*
class User(BaseUser):
def in_country(county):
return self.address.country == country
class Address(BaseAddress):
pass
The goal here is to create subclasses which sqlalchemy need not distinguish
from their parents. If I insert an Address into User.address, for example,
sqlalchemy should not complain about a type mismatch (Address instead of
the expected BaseAddress).
The only way of doing this that I can discern would involve using
polymorphic_on in the parent classes. I don't want to do this, because it
doesn't accurately model what is happening. It would require a
discriminator, and it might behave strangely in the event I used a
migration script locally. Is there a way with sqlalchemy to achieve
polymorphism (I think it's called "ad-hoc polymorphism") *without* using
discriminators, or some other way of achieving my goal?
*Oblig:*
Special thanks to everyone who participants in this group. I have followed
it, though haven't contributed to it. I have created a SO post for this as
well here in case anyone wants to rack up a few
points:
http://stackoverflow.com/questions/42918152/sqlalchemy-polymorphism-without-discriminators
--
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 post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.