python sqlalchemy - 无法使级联删除工作 - 在 mssql 管理器中

python sqlalchemy - can't get cascade delete to work - in mssql manager

我有这段代码,大部分是从 sqlalchemy 站点获取的

class Order(Base):
    __tablename__ = 'order'
    id = Column(Integer, Sequence('tri_id_seq'), primary_key=True)
    text = Column(String(1024), nullable=False)
    items = relationship("Item", cascade="save-update, delete-orphan, merge, delete", backref="parent")

class Item(Base):
    __tablename__ = 'item'
    id = Column(Integer, Sequence('tri_id_seq'), primary_key=True)
    text = Column(String(1024), nullable=False)
    parent_id = Column(Integer, ForeignKey('order.id'))

我想删除 Order 级联并删除它的项目。在代码中:

# test insert/delete - save data to mssql server
i1 = Item(text="item one")
i2 = Item(text="item two")
o = Order(text="one", items=[i1, i2])
session.add(o)
session.commit()

session.delete(o) # delete it
# tests to make sure items/order gone ....
session.commit()

这没问题。

但是如果我尝试在 MS SQL management studio 中删除订单。即

DELETE FROM [dbo].[order] WHERE id = 1

我收到错误 "the DELETE statement conflicted with the REFERENCE constraint FK__item__parent_id_1D00044F" 冲突错误等等等等....

我想关系定义中缺少某些内容,但我看不到。

任何 help/thoughts?

ta.

class Comment(Base):
    __tablename__ = 'comments'

    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey("users.id", ondelete='CASCADE'), nullable=False)

    user = relationship("User", backref=backref('comments', cascade="all,delete", order_by=id))

这种设置适合我,我的 User class 除了主键外没有任何特殊字段。 所以基本上,这按预期工作,当我删除用户时 - 他的评论也消失了。 它也不必通过 SQLAlchemy 删除,此代码创建一个适当的 table 结构,即使您手动删除用户(sql 查询)- 级联删除仍然有效。