我正在一个MySQL数据库中存储一组专利数据,并通过SQLAlchemy与之交互。我在专利类中有一个集合,代表受让人列表(被转让专利的公司):
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)
实际上会删除Company对象a
。我只想将受让人a
从p
的受让人列表中删除(即删除专利公司表中的一行),而不是实际删除公司对象,因为a
可能在另一个专利对象的受让人列表中。
我试着创建一个新的列表new_assignees
,该列表除了a
之外,还只包含p
中的受让人,然后调用:
p.assignees = new_assignees
s.add(p)
不幸的是,这实际上并没有将p
标记为脏,所以我假设它不会影响数据库。
对于如何从集合中删除对象、删除patent_company_表中的行而不是从company表中删除对象,您有何建议?
谢谢你。
下面是一段代码:
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
修改之后,是否需要手动添加到会话?
SQLAlchemy集合支持类似于追加/删除操作的列表。
这应该删除
c
表单p.assignees
,而不从数据库中删除c
。一个工作示例脚本意味着,我们可以完全运行它。这是根据你给出的片段生成的脚本。唯一有帮助的是将“assignees”作为一个列表进行评估,因为您正在从列表中删除,所以很可能您没有正确地迭代。
相关问题 更多 >
编程相关推荐