Удаление объекта из коллекции в SQLAlchemy
Я храню пачку патентных данных в базе данных MySQL и взаимодействую с ней через SQLAlchemy. У меня есть коллекция внутри класса Patent, представляющая список правопреемников (компаний, которым был выдан патент):
<code>assignees = relationship('Company', secondary=patent_company_table, backref='patents') </code>
Я обрабатываю некоторые объекты, хранящиеся в базе данных и для объекта Патентаp
, Я хочу удалить правопреемникаa
(объект компании) изp
писок правопреемников @. Основано наhttp: //docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collection кажется, что зоветs.delete(a)
фактически удалит объект Companya
. Я просто хочу удалить цессионарияa
из списка правопреемниковp
(то есть удалить строку вatent_company_table), НЕ фактически удалять объект Company, потому чтоa
может быть в списке правопреемников другого объекта Патента.
Я пытался создать новый списокnew_assignees
, который включает только получателей изp
Кромеa
а затем позвонил:
<code>p.assignees = new_assignees s.add(p) </code>
Это, к сожалению, на самом деле не помечаетp
как грязный, поэтому я предполагаю, что это не повлияет на базу данных.
Есть ли у вас какие-либо предложения о том, как удалить объект из коллекции, удалив строку из таблицыatent_company_table вместо удаления объекта из таблицы Company?
Спасибо
ОБНОВИТВот фрагмент кода:
<code>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) </code>
После прохождения всех патентов,added_patent_count = 983672
но в @ нет объектsession.dirty()
. Нужно ли добавлять вручную в сеанс после изменения черезappend
илиremove
?