【发布时间】:2012-04-30 04:22:05
【问题描述】:
我将一堆专利数据存储在 MySQL 数据库中,并通过 SQLAlchemy 与之交互。我在 Patent 类中有一个集合,代表受让人(被分配专利的公司)列表:
assignees = relationship('Company', secondary=patent_company_table, backref='patents')
我正在处理存储在数据库中的一些对象,对于专利对象p,我想从p 的受让人列表中删除一些受让人a(公司对象)。基于http://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections,调用s.delete(a) 似乎实际上会删除公司对象a。我只是想从p 的受让人列表中删除受让人a(即删除patent_company_table 中的一行),而不是实际删除公司对象,因为a 可能在另一个专利对象的受让人列表中。
我尝试创建一个新列表new_assignees,其中仅包括来自p 的受让人除了a,然后调用:
p.assignees = new_assignees
s.add(p)
不幸的是,这实际上并没有将p 标记为脏,所以我认为它不会影响数据库。
您对如何从集合中删除对象有什么建议吗?删除patent_company_table 中的行而不是从Company 表中删除对象?
谢谢。
更新
这是一个sn-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或remove修改后是否需要手动添加到会话中?
【问题讨论】:
-
您能否提取并发布此问题的工作示例脚本(模型定义、示例重复字典等)?还想知道您使用的是什么类型的
PrimaryKey标识符?
标签: python mysql sqlalchemy