Hi all, It has been only a while since I've started tinkering with SQLAlchemy. I aws working on a particular requirement of mine, where I had 4 types of users with login functionality. But each type has different attributes. The user types are : Client, Brand, Merchant, Customer. All these types were supposed to have login access to the system. I created a parent model called User and other models like Client, Brand, Merchant and Customer inherits from the User model. I implemented it using joined table inheritance as per the documentation.
============================================================ *# User Model* class User(UserMixin, BaseModel): __tablename__ = "users" id = Column(Integer, primary_key=True, autoincrement=True, unique=True) email = Column(String, unique=True, nullable=False, index=True) confirmed = Column(Boolean, default=False, nullable=False) role = Column(Enum(Role)) __mapper_args__ = { "polymorphic_on": role, } ============================================================= *# Client Model* class Client(User): __tablename__ = "clients" id = Column(Integer, ForeignKey("users.id"), primary_key=True) __mapper_args__ = { "polymorphic_identity": "client", 'inherit_condition': (id == User.id) } client_data = (...) ..... ================================================================ *# Brand Model* class Brand(User): __tablename__ = "brands" id = Column(Integer, ForeignKey("users.id"), primary_key=True) __mapper_args__ = { "polymorphic_identity": "brand", 'inherit_condition': id == User.id } brand_data = (...) ..... Then I created an User object, which is to serve as the admin user. It works fine and well. But the problem is when I'm creating other user types. For eg: when I'm creating a Client object, a row is created in the Client table as well as the User table. I am able to login with the client user. But the problem is when I'm trying to access the Client object's attributes. And the object type returned while querying the Client is of type User. >>> from src.models.models import User >>> User.get_all() [<User 63: xxxxxxx>, <User 7: xxxxxxx>, <User 67: xxxxxxxx>, <User 13: xxxxxxxx>, <User 69: xxxxxxxxx>, <User 72: xxxxxxxx>] >>> from src.models.models import Client >>> >>> Client.get_all() [<User 7: xxxxxx>, <User 67: xxxxxxx>, <User 69: xxxxxx>] >>> But if I'm making the query on Client object before loading the User, it returns fine. >>> from src.models.models import Client >>> Client.get_all() [<Client xxxxx>, <Client xxxxxxx>, <Client xxxxxx>] >>> I feel like I'm missing out on something? -- 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/212bff82-4d99-4d77-a7a2-0968dcae15a1n%40googlegroups.com.