gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:25:46 25 4
gpt4 key购买 nike

我有这段代码,大部分是从 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 管理工作室中删除订单。即

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

我得到了错误“DELETE 语句与 REFERENCE 约束 FK__item__parent_id_1D00044F 冲突”冲突错误等等......

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

有什么帮助/想法吗?

他。

最佳答案

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 查询)- 级联删除仍然有效。

关于python sqlalchemy - 无法使级联删除工作 - 在 mssql 管理器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com