Мне нужна помощь с пониманием того, как наследование работает в SQLAlchemy. Я создал базовый класс для пользователя с некоторыми базовыми функциями. А затем некоторые конкретные пользователи (admin, cooluser, uncooluser). Каждый из них имеет уникальную функциональность, поэтому я решил использовать наследование в SQLAlchemy. Проблема в том, что мне нужно иметь возможность обновлять пользователя до cooluser или uncooluser и в любое время понижать рейтинг пользователя cooluser.Проблема наследования в SQLAlchemy
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?
Спасибо за ответ, но я до сих пор путаю. Как изменить тип 'User' на' CoolUser'? Если я создам новый «CoolUser», он будет дублировать «Пользователь» в таблице «CoolUser»? – hitripekac
Пожалуйста, проверьте пример и попробуйте 'polymorphic_on'. Если вы получите какую-либо ошибку, напишите эту ошибку, чтобы мы могли ее решить. – Nilesh
База данных с определенной моделью уже существует и не может быть изменена, потому что есть уже другое программное обеспечение, которое подключается к ней. Я попытался сделать код python так, чтобы он соответствовал этой модели. Мне придется переосмыслить все это ... Я благодарен за помощь. – hitripekac