我将大量专利数据存储在 MySQL 数据库中,并通过 SQLAlchemy 与其进行交互。我在专利类中有一个集合,代表受让人列表(被分配专利的公司):
assignees = relationship('Company', secondary=patent_company_table, backref='patents')
我正在处理存储在数据库中的一些对象以及专利对象p
,我想删除一些受让人a
(公司对象)来自p
的受让人名单。基于http://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections,似乎调用s.delete(a)
实际上会删除 Company 对象a
。我只是想删除受让人a
从受让人名单中p
(即删除patent_company_table中的一行),实际上并没有删除Company对象,因为a
可能在另一个专利对象的受让人列表中。
我尝试创建一个新列表new_assignees
只包括受让人p
除了a
然后调用:
p.assignees = new_assignees
s.add(p)
不幸的是,这实际上并没有标记p
因为脏,所以我认为它不会影响数据库。
对于如何从集合中删除对象(删除patent_company_table 中的行而不是从Company 表中删除对象),您有什么建议吗?
谢谢。
UPDATE
这是代码片段:
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()
。修改via后是否需要手动添加到会话中append
or remove
?