【问题标题】:Table(Model) Inheritance with Flask SQLAlchemyFlask SQLAlchemy 的表(模型)继承
【发布时间】:2014-08-07 17:54:27
【问题描述】:

我遵循了question 中的建议,但仍然收到此错误: sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'investment' and '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 表继承并保留所有这些属性。

谁能看到我错过了什么?

【问题讨论】:

标签: python flask sqlalchemy flask-sqlalchemy


【解决方案1】:

RealEstate 中的id 属性必须是引用投资的外键。否则,你怎么能说每一个房地产都是投资呢?

将您的 RealEstate 类定义更改为以下内容:

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)

【讨论】:

  • 这对我不起作用,我可以创建表而不会出错的唯一方法是将 id 列更改为以下内容:id = db.Column(db.Integer, primary_key=True, default=lambda: uuid.uuid4().hex)。如果有人遇到此评论并能告诉我原因,即使使用与上面完全相同的代码我也无法在没有默认设置的情况下生成主键,请告诉我。
猜你喜欢
  • 2013-06-08
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2017-10-13
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多