栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当外键约束是组合主键的一部分时,依赖关系规则试图清除SQLAlchemy中的主键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当外键约束是组合主键的一部分时,依赖关系规则试图清除SQLAlchemy中的主键

根据van的评论,我能够找到解决方案。默认关系级联为

"save-update, merge"
。我必须将此设置为
"save-update, merge,delete, delete-orphan"

单独添加

delete
并不能改变行为,这
delete-orphan
是必要的。

添加仅

delete-orphan
使删除测试用例失败,并带有问题中提到的“依赖关系规则”断言错误:

class HierarchicModelTest(unittest.TestCase):    def test_delete_parent_object(self):        foo = Foo(**foo_data).save()        self.assertEqual(Foo.query.count(), 1)        self.assertEqual(FooCycle.query.count(), 1)        s = get_session()        s.delete(foo)        s.flush()        self.assertEqual(Foo.query.count(), 0)        self.assertEqual(FooCycle.query.count(), 0)

-

  File "/home/xxx/xxx/xxx/backend/tests/test_core.py", line 128, in test_delete_parent_object     s.flush()  [...]  AssertionError: Dependency rule tried to blank-out primary key column 'foocycle.foo_id' on instance '<FooCycle at 0x37a1710>'

从SQLAlchemy文档中:

delete-orphan
级联为级联添加了行为
delete
,这样子对象在与父对象解除关联时将被标记为删除,而不仅仅是父对象被标记为删除。

因此,FooCycle模型的正确定义是

class FooCycle(base):    __tablename__ = 'foocycle'    foo_id = Column(        String(50),        ForeignKey('foo.id'),        primary_key=True    )    some_number = Column(        Integer,        primary_key=True,    )    foo = relationship("Foo", backref=backref("cycles",       cascade="save-update, merge, "    "delete, delete-orphan"))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号