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))
「tbl_users」に新しい行を作成せずにCoolUserを作成できますが、既存のものを使用できますか? CoolUserが削除されたときに、 'tbl_user'でなく 'tbl_user'のエントリを削除するように、いくつかの設定を変更できますか?
SQLAlchemyで継承のポイントがありませんか?
私はまだ混乱しています。 'User'のタイプを' CoolUser'に変更するにはどうしたらいいですか?新しい 'CoolUser'を作成すると' CoolUser'テーブルに 'User'が複製されますか? – hitripekac
この例を確認し、 'polymorphic_on'を試してください。エラーが発生した場合は、そのエラーを書き込み、解決できるようにしてください。 – Nilesh
特定のモデルのデータベースは既に存在し、変更することはできません。これは、接続する別のソフトウェアが既に存在するためです。私がしようとしたのは、そのモデルに準拠するようにPythonコードを作ることです。私はすべてのことを考え直さなければならないでしょう...しかし、私は助けに感謝しています。 – hitripekac