Мне нужна помощь в понимании того, как наследование работает в SQLAlchemy. Я создал базовый класс для пользователя с некоторыми базовыми функциями. А затем некоторые конкретные пользователи (администратор, cooluser, uncooluser). Каждый из них обладает уникальной функциональностью, поэтому я решил использовать наследование в SQLAlchemy. Проблема в том, что мне нужно иметь возможность обновить пользователя до cooluser или uncooluser и понизить версию cooluser до пользователя в любое время.
class User(Base):
__tablename__ = 'tbl_users'
__table_args__ = {'mysql_engine': 'InnoDB'}
user_id = Column(Integer, primary_key = True, unique = True, nullable = False)
user_name = Column(String(100), nullable = False, unique = True)
password = Column(String(100), nullable = False)
user_type = Column('user_type', String(50))
first_name = Column(String(50), nullable = False)
last_name = Column(String(50), nullable = False)
address = Column(String(50), nullable = False)
city = Column(String(20), nullable = False)
postal_code = Column(String(10), nullable = False)
country_id = Column(Integer, ForeignKey(Contries.country_id))
country = relationship('Country', backref = 'users')
query = Session.query_property()
__mapper_args__ = {'polymorphic_on': user_type, 'polymorphic_identity': 'User'}
class CoolUser(User):
__tablename__ = 'tbl_cool_user'
__table_args__ = {'mysql_engine': 'InnoDB'}
__mapper_args__ = {'polymorphic_identity': 'CoolUser'}
cool_user_id = Column(Integer, ForeignKey(User.user_id, ondelete = 'CASCADE'), primary_key = True)
cool_user_balance = Column(Numeric(15, 3))
Могу ли я создать CoolUser, не создавая новую строку в 'tbl_users', но используя существующую? Можно изменить некоторые настройки, чтобы при удалении CoolUser он просто удалял запись в «tbl_cool_user», а не «tbl_user»?
Мне не хватает точки наследования в SQLAlchemy?