Flask SQLAlchemy中的表(模型)继承

8 投票
1 回答
9461 浏览
提问于 2025-04-18 16:26

我按照这个问题里的建议去做了,但还是遇到了这个错误:

sqlalchemy.exc.NoForeignKeysError: 找不到 'investment' 和 'real_estate' 之间的外键关系。

模型

class Investment(db.Model):

    __tablename__ = 'investment'
    __mapper_args__ = {'polymorphic_identity': 'investment'}

    id = Column(db.Integer, primary_key=True)
    item_name = Column(db.String(64))
    investment_type = Column(db.String(32), nullable=False)
    __mapper_args__ = {'polymorphic_on': investment_type}

class RealEstate(Investment):

    __tablename__ = 'real_estate'
    __mapper_args__ = {'polymorphic_identity': 'real_estate'}
    id = Column(db.Integer, primary_key=True)
    current_balance = Column(db.Float)

我还更新了那个答案中的示例,以符合SQLAlchemy文档中的变化,但错误依然存在。

这里的目标是,我不想让RealEstate继承的属性出现在Investment表里。我希望这些属性能在RealEstate表中继承并保留。

有没有人能帮我看看我漏掉了什么?

1 个回答

4

在房地产(RealEstate)中,id 属性必须是一个外键,指向投资(Investment)。否则,你怎么能说每个房地产都是一种投资呢?

把你的房地产类的定义改成下面这样:

class RealEstate(Investment):
    __tablename__ = 'real_estate'
    __mapper_args__ = {'polymorphic_identity': 'real_estate'}
    # This id below should reference Investment. Hence, define it as foreign key. 
    id = Column(Integer, ForeignKey('investment.id'), primary_key=True)
    current_balance = Column(db.Float)

撰写回答