SQLAlchemy - 如何在父项已持久化时插入已连接的表继承的类实例

时间:2016-10-07 23:08:41

标签: python flask sqlalchemy flask-sqlalchemy

我使用SQLAlchemy Joined Table Inheritance声明了两个clases。另外我使用 Flask-SQLAlchemy 和Flask。

class Parent(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    type = db.Column(db.String(50))

    __mapper_args__ = {
        'polymorphic_identity': 'parent',
        'polymorphic_on': type
    }


class Child(Parent):

    id = db.Column(db.Integer, db.ForeignKey('parent.id'), primary_key=True)
    brand_id = db.Column(db.Integer, nullable=False)

    __mapper_args__ = {
        'polymorphic_identity': 'child',
    }

父表和子表之间的关系是一对一,在子端可选出现。

当我创建Child的新实例时,将其添加到会话并将其提交到数据库,一切都按预期工作。 SQLAlchemy将 INSERT语句发送到父表,然后将另一个 INSERT发送到子表,这些都是单独的,从而避免任何外键约束违规

在应用程序的某些方面,我想在子表中添加一个新行,引用父表中已存在的行。

当我创建一个新的 Child 实例并将其手动分配给FK列并将其发送到数据库时。我得到一个IntegrityError(重复唯一约束违规),因为SQLAlchemy尝试在数据库中创建一个新的父条目,并将id传递给子实例。

所以,真正的问题是:

如何告诉SQLAlchemy,父条目已存在于数据库中,我只想创建子条目?

0 个答案:

没有答案