【发布时间】:2014-05-20 06:56:12
【问题描述】:
我有这样的模型层次结构:
class Foo(Base):
id = Column(
Integer,
Sequence('foo_id_seq', start=1001, increment=1),
primary_key=True
)
discriminator = Column('type', String(20), nullable=False)
__tablename__ = 'foo'
__mapper_args__ = {
'polymorphic_on': discriminator,
'polymorphic_identity': 'foo',
}
class Bar(Foo):
id = Column(Integer, ForeignKey('foo.id'), primary_key=True)
__tablename__ = 'bar'
__mapper_args__ = {
'polymorphic_identity': 'bar',
}
当我尝试使用db.query(Foo).delete() 删除所有Foo 实例时,我得到了
IntegrityError: (IntegrityError) ERROR: update or delete on table "foo" violates foreign key constraint "bar_foo_id_fkey" on table "bar"
DETAIL: Key (id)=(68575) is still referenced from table "bar".
嗯,这个错误是有道理的,但是如何让它工作呢?我在人际关系中需要像cascade 这样的东西,但是对于多态性。我在任何地方都找不到它。我想出的只是建立一种关系,只是在那里有cascade,但这似乎不对。
通常的做法是什么?
【问题讨论】:
标签: python orm sqlalchemy polymorphism