gpt4 book ai didi

python - 在 SQLAlchemy 中从集合中删除一个对象

转载 作者:可可西里 更新时间:2023-11-01 07:46:28 25 4
gpt4 key购买 nike

我将大量专利数据存储在 MySQL 数据库中,并通过 SQLAlchemy 与其进行交互。我在 Patent 类中有一个集合,代表受让人列表(被分配专利的公司):

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) 实际上会删除公司对象 a。我只是想从 p 的受让人列表中删除受让人 a(即删除 patent_company_table 中的一行),而不是实际删除公司对象,因为 a 可能在另一个专利对象的受让人列表中。

我尝试创建一个新列表 new_assignees,其中除了 a 之外只包含来自 p 的受让人,然后调用:

p.assignees = new_assignees
s.add(p)

不幸的是,这实际上并没有将 p 标记为脏,所以我认为它不会影响数据库。

对于如何从集合中删除对象、删除 patent_company_table 中的行而不是从 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_pa​​tent_count = 983672 但是 session.dirty() 中没有任何对象。通过appendremove修改后是否需要手动添加到session?

最佳答案

SQLAlchemy 集合支持类似列表的追加/删除操作。

p.assignees.remove(c)

这应该从 p.assignees 中删除 c 而不会从数据库中删除 c

关于python - 在 SQLAlchemy 中从集合中删除一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10378468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com