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

时间:2015-04-29 11:48:09

标签: python sql-server sqlalchemy cascade

我有这个代码,主要来自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'))

我想删除订单以便级联并删除其项目。在代码中:

# 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管理工作室中的订单。即。

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

我收到错误 " DELETE语句与REFERENCE约束FK__item__parent_id_1D00044F"冲突。冲突错误等等等等......

我想关系定义中缺少一些内容,但我无法看到它。

任何帮助/想法?

TA

1 个答案:

答案 0 :(得分:0)

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类除主键外没有任何特殊字段。 所以基本上,当我删除用户时,这按预期工作 - 他的评论也消失了。 它也不必通过SQLAlchemy删除,这段代码创建了一个合适的表结构,即使你手动删除用户(sql查询) - 级联删除仍然有效。