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):
<code>assignees = relationship('Company', secondary=patent_company_table, backref='patents') </code>
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ł:
<code>p.assignees = new_assignees s.add(p) </code>
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:
<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>
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
?