首页 > 解决方案 > SQLAlchemy 关联对象 - 如何在(Python)代码中处理它们

问题描述

我正在使用 SQLAlchemy(链接到 MYSQL 数据库)和 Python。

我的数据库中有两个表,Memberships 和 MembershipTypes。每个 Membership 可以有多个 MembershipTypes,所以我有一个名为“associationtable_membership_membershiptypes”的关联表。

目前该关联表只包含membershipID 和membershipTypeID。这很好用,因为在 Python 方面,我可以在 Membership 类中设置如下内容:

relationship('MembershipType', secondary='AssociationTable_Membership_MembershipTypes', backref='Memberships')

我可以在代码中添加到这个列表,然后,当我调用会话提交时,会填充该关联表。当我拿到记录时,它也可以在另一边工作。我还应该说 AssociationTable_Membership_MembershipTypes 是一个类,即“关联对象”。我知道人们可以只用桌子来建立这种关系,但我没有。

所以,对于问题

每个 Membership 可以有多个 SAME MembershipType(表中的相同记录,Python 内存中的相同对象)。起初我想也许我可以将多个相同的条目添加到关联表中(我可以通过拥有一个唯一的 id 然后是成员资格和成员资格类型的两个 ID 来绕过唯一性方面)。这没有用,我被告知以这种方式这样做的想法只是不好的做法,因为它违反了所谓的“第一范式”。它以什么方式不起作用?好吧,SQLAlchemy 只是从列表中删除了额外的项目。

所以我需要一种不同的方式。我认为可行的方法是在关联表中添加一个名为“数量”的新列。这样,如果会员有两种金会员类型(例如),“2”将出现在数量列中。

对我来说,这里的问题不是想法。我理解这种关系以及它是如何运作的。我的问题是如何在 Python 端处理它。以前只有一个我设置的列表,我可以添加到,提交会自动处理它。在重新安排事情之前,我不必介入。

那么建议的方法是什么?除了我的 Memberships 列表之外,我是否还必须保留 AssociationTable_Membership_MembershipTypes 的列表?然后,在提交之前,查询每个 Membership 看是否有重复的?然后当然当我获取数据时反过来做同样的事情?与之前的操作相比,它看起来相当繁琐,因此更容易出错。是否有捷径可寻?

标签: pythonmysqlsqlalchemy

解决方案


推荐阅读