我将一堆专利数据存储在 MySQL 数据库中,并通过 SQLAlchemy 与之交互。我在 Patent 类中有一个集合,代表受让人(被分配专利的公司)列表:
assignees = relationship('Company', secondary=patent_company_table, backref='patents')
我正在处理存储在数据库中的一些对象,对于 Patent 对象p
,我想从的受让人列表中删除一些受让人a
(公司对象) 。p
基于http://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections,似乎调用s.delete(a)
实际上会删除 Company object a
。我只是想从受让人a
列表中删除受让人p
(即删除专利公司表中的一行),而不是实际删除公司对象,因为a
可能在另一个专利对象的受让人列表中。
我尝试创建一个新列表new_assignees
,其中仅包含来自p
除此之外的受让人a
,然后调用:
p.assignees = new_assignees
s.add(p)
不幸的是,这实际上并没有标记p
为脏,所以我认为它不会影响数据库。
您对如何从集合中删除对象有任何建议,删除专利公司表中的行而不是从公司表中删除对象?
谢谢你。
更新
这是代码片段:
assignees = patent.assignees
for assignee in assignees:
if assignee in duplicate_company_to_default:
patent.assignees.remove(assignee)
default_company = duplicate_company_to_default[assignee]
if default_company not in assignees:
added_patent_count += 1
patent.assignees.append(default_company)
循环遍历所有专利后,added_patent_count = 983672
但session.dirty()
. append
通过or修改后是否需要手动添加到会话中remove
?