python - SQLAlchemy 与额外数据(关联对象)的多对多关系 - 如何删除
问题描述
我正在使用 SQLAlchemy(与 MySQL)和 Python。
我之前已经成功地使用了 SQLAlchemy 的多对多关系,我发现它们非常直观且易于使用。在这两种情况下,我都有 Memberships 和 MembershipTypes,每一个都是数据库中的一个类和一个表。
以前,当我设置它时,我可以很容易地清除对象的关联。它将是 Membership.MembershipTypes.clear() 然后是提交。
但现在情况有些不同了。我使用此处列出的模型来设置带有额外数据的关联对象。带有额外数据的版本需要对我以前的操作方式进行一些更改(老实说,以前更容易,但我需要这种方式,所以我们就可以了)。尽管如此,它仍然有效。我似乎无法弄清楚如何做的一件事是从关联表中删除条目。现在,在我的情况下,我已将“父”更改为“会员”,将“子”更改为“会员类型”,将“关联”更改为“会员会员类型”,但除此之外,它的设置方式与示例链接相同。
在 Membership 之前有一个 MembershipTypes 列表,这是一个关系。您可以添加和删除,也可以清除该列表,然后承诺清除关联。它是如此美好和容易。现在 Membership 仍然有一个该名称的列表,但类型不同。这次的类型是关联对象(MembershipMembershipType)。添加起来并不难:
memb01.membershiptypes.append(MembershipMembershipType(membershipType=membType01, quantity=6))
这为成员资格 (memb01) 设置了成员资格类型以及使用关联对象的额外数据(数量)。我认为我可以通过简单的 clear and commit 以类似于我之前所做的方式来删除关联。
因为我认为它会以类似的方式工作,所以我尝试了以下方法:
memberships = sqlInterface.session.query(Membership).all()
memberships[0].membershiptypes.clear()
但是,当我调用提交时,我收到以下错误消息:
AssertionError: Dependency rule tried to blank-out primary key column 'membershipmembershiptypes.membership_id' on instance '<MembershipMembershipType at 0x3c9d390>'
老实说,我不确定我是否理解错误消息。我猜“空白”意味着删除该主键?这不是我想做的吗?
简而言之,如何删除给定 Membership 的关联?理想情况下使用 Python 端而不是为数据库编写查询。
解决方案
推荐阅读
- java - 英特尔 HD 3700 linux 的 Java 8 Swing 渲染问题
- xsd - 跳过 BizTalk 平面文件程序集中的元素?
- php - Laravel,只能在控制器内闪烁错误消息吗?
- node.js - Reactjs - 登录后移至下一页
- gitkraken - Gitkraken - 当重新定位错误“无法将没有 HEAD 的子模块添加到索引”时
- php - Soap WCF 对象引用未设置为对象上的实例
- android - OpenID AppAuth 和自定义选项卡 - 从不使用自定义选项卡,始终使用外部浏览器 - 为什么?
- angular-material - Angular 6 CoreUI 和日期选择器
- salesforce - 调用 Salesforce Einstein Analytics REST API SAQL 查询时出错
- selenium - 量角器文件上传到链接