Usuwanie obiektu z kolekcji w SQLAlchemy
Przechowuję kilka danych patentowych w bazie danych MySQL i wchodzę w interakcję z nią za pośrednictwem SQLAlchemy. Mam kolekcję w klasie Patent, która reprezentuje listę cesjonariuszy (firmy, którym przyznano patent):
assignees = relationship('Company', secondary=patent_company_table, backref='patents')
Przetwarzam niektóre obiekty przechowywane w bazie danych i dla obiektu patentowegop
, Chcę usunąć jakiegoś cesjonariuszaa
(obiekt firmy) zp
lista cesjonariuszy. Na podstawiehttp://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections , wydaje się, że wołanies.delete(a)
faktycznie usunie obiekt firmya
. Chcę po prostu usunąć cesjonariuszaa
z listy cesjonariuszy dlap
(tj. usuń wiersz w tabeli nazwa_firmy patentowej), NIE usuwaj obiektu firmy, ponieważa
może znajdować się na liście cesjonariuszy innego obiektu patentowego.
Próbowałem utworzyć nową listęnew_assignees
obejmuje to tylko cesjonariuszy zp
oprócza
a następnie zadzwonił:
p.assignees = new_assignees
s.add(p)
To niestety nie oznaczap
tak brudne, więc zakładam, że nie wpłynie to na bazę danych.
Czy masz jakieś sugestie, jak usunąć obiekt z kolekcji, usuwając wiersz w tabeli nazwa_firmy patentowej, a nie usuwając obiekt z tabeli Firma?
Dziękuję Ci.
AKTUALIZACJAOto fragment kodu:
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)
Po zapętleniu wszystkich patentówadded_patent_count = 983672
ale nie ma żadnych obiektówsession.dirty()
. Czy muszę dodać ręcznie do sesji po zmodyfikowaniu przezappend
lubremove
?